Skip to content

IPNS -- Tên Có thể Thay đổi cho IPFS

IPNS (InterPlanetary Name System) cung cấp cho bạn địa chỉ ổn định, có thể chia sẻ có thể được cập nhật để trỏ đến nội dung khác nhau theo thời gian. Trong khi CID IPFS thay đổi mỗi khi nội dung thay đổi, tên IPNS vẫn giữ nguyên -- bạn chỉ cần cập nhật nơi nó trỏ đến.

Có sẵn trên gói Bodhi (3 tên, 100 lần xuất bản/tháng) và Nirvana (10 tên, 1.000 lần xuất bản/tháng).

Tìm hiểu thêm về IPNS

Để tìm hiểu sâu về cách IPNS hoạt động ở cấp giao thức, xem tài liệu chính thức IPFS về IPNS.

Trang quản lý tên IPNS

Tại sao sử dụng IPNS?

Vấn đề: Mỗi khi bạn tải lên phiên bản mới của tệp lên IPFS, bạn nhận được CID khác. Nếu bạn đã chia sẻ CID cũ với người dùng, họ vẫn thấy nội dung cũ. Bạn phải chia sẻ liên kết mới mỗi lần.

Giải pháp: Tạo tên IPNS một lần, chia sẻ nó, và cập nhật nơi nó trỏ đến bất cứ khi nào nội dung thay đổi. Bất kỳ ai có địa chỉ IPNS luôn nhận được phiên bản mới nhất.

Trường hợp sử dụng phổ biến

  • Trang web trên IPFS -- Triển khai trang web, lấy CID, xuất bản lên tên IPNS. Triển khai lại -> CID mới -> cập nhật tên IPNS. URL không bao giờ thay đổi.
  • Siêu dữ liệu NFT phát triển -- Trỏ tokenURI của NFT đến địa chỉ IPNS. Cập nhật siêu dữ liệu (ví dụ: vật phẩm game lên cấp) mà không thay đổi hợp đồng thông minh.
  • Tệp cấu hình -- Ứng dụng đọc cấu hình từ địa chỉ IPNS. Cập nhật cấu hình mà không triển khai lại ứng dụng.
  • Nguồn dữ liệu -- Xuất bản tập dữ liệu hàng ngày hoặc nguồn giá dưới địa chỉ IPNS ổn định.
  • DNSLink -- Kết nối miền với IPNS để https://yourdomain.com luôn phục vụ nội dung IPFS mới nhất.

Sử dụng Bảng điều khiển

1. Tạo tên IPNS

  1. Đi đến IPNS trong thanh bên dưới mục Hosting.
  2. Nhấn Tạo tên.
  3. Nhập nhãn (ví dụ: "my-website") và nhấn Tạo.
  4. Sao chép địa chỉ IPNS (bắt đầu bằng k51...) -- đây là địa chỉ vĩnh viễn, có thể chia sẻ.
Trang IPNS với khóa đã tạo

2. Xuất bản CID lên tên IPNS

  1. Tìm tên IPNS trong danh sách và nhấn Xuất bản.
  2. Nhập CID bạn muốn trỏ đến (ví dụ: QmXk7VRz... hoặc bafybei...).
  3. Nhấn Xuất bản. Quá trình này lan truyền đến mạng IPFS và có thể mất tới 60 giây.
  4. Sau khi xuất bản, nội dung có thể truy cập tại:
    • Gateway IPFS: https://ipfs.ninja/ipns/{ten-ipns-cua-ban}
    • Bất kỳ gateway công cộng: https://dweb.link/ipns/{ten-ipns-cua-ban}
    • IPFS gốc: ipns://{ten-ipns-cua-ban}
Trang IPNS với CID đã xuất bản

3. Cập nhật nội dung

Khi nội dung thay đổi:

  1. Tải lên phiên bản mới lên IPFS (qua bảng điều khiển hoặc API) -> nhận CID mới.
  2. Quay lại IPNS, nhấn Xuất bản trên cùng tên, nhập CID mới.
  3. Địa chỉ IPNS vẫn giữ nguyên -- bất kỳ ai sử dụng nó tự động nhận nội dung mới.

4. Phân giải tên IPNS

Sử dụng phần Phân giải ở cuối trang để tra cứu CID hiện tại cho bất kỳ tên IPNS nào -- của bạn hoặc của bất kỳ ai khác.

5. Xóa tên IPNS

Nhấn nút xóa bên cạnh bất kỳ tên nào. Bản ghi IPNS sẽ hết hạn từ mạng trong vòng 48 giờ.

Bạn có thể trỏ tên miền riêng đến địa chỉ IPNS bằng DNSLink. Điều này cho phép người dùng truy cập nội dung IPFS qua URL thông thường như https://yourdomain.com.

  1. Tạo tên IPNS và xuất bản CID nội dung lên đó (các bước ở trên).

  2. Thêm bản ghi DNS TXT tại nhà cung cấp DNS của miền:

    _dnslink.yourdomain.com  TXT  "dnslink=/ipns/{ten-ipns-cua-ban}"

    Ví dụ: Nếu tên IPNS của bạn là k51qzi5uqu5djcpbukxs...:

    _dnslink.myapp.com  TXT  "dnslink=/ipns/k51qzi5uqu5djcpbukxs..."
  3. Xác minh bản ghi bằng dig hoặc nslookup:

    bash
    dig +short TXT _dnslink.myapp.com
    # Nên trả về: "dnslink=/ipns/k51qzi5uqu5djcpbukxs..."
  4. Truy cập qua bất kỳ gateway IPFS nào hỗ trợ DNSLink:

    https://ipfs.ninja/ipns/myapp.com

    Hoặc qua trình duyệt hỗ trợ IPFS (như Brave):

    ipns://myapp.com

Lan truyền DNS

Thay đổi DNS có thể mất tới 24 giờ để lan truyền toàn cầu. Sau khi thêm bản ghi TXT, đợi vài giờ trước khi kiểm tra.

TIP

Bạn chỉ cần thiết lập DNSLink một lần. Khi bạn xuất bản CID mới lên tên IPNS, miền tự động phân giải đến nội dung mới -- không cần thay đổi DNS.

Nếu bạn sử dụng Cloudflare:

  1. Đi đến DNS -> Bản ghi.
  2. Thêm bản ghi mới: Loại: TXT, Tên: _dnslink, Nội dung: dnslink=/ipns/k51...
  3. Đặt trạng thái proxy thành Chỉ DNS (đám mây xám).
  1. Đi đến hosted zone trong Route 53.
  2. Tạo bản ghi: Tên: _dnslink.yourdomain.com, Loại: TXT, Giá trị: "dnslink=/ipns/k51..."

Ví dụ Sử dụng

Ví dụ 1: Triển khai trang web tĩnh

bash
# 1. Build trang web
npm run build

# 2. Tải đầu ra build lên IPFS
CID=$(curl -s -X POST https://api.ipfs.ninja/upload/new \
  -H "X-Api-Key: bws_your_api_key" \
  -H "Content-Type: application/json" \
  -d "{\"content\": $(cat dist/index.html | base64 -w0 | jq -Rs .), \"description\": \"Website v2.1\"}" \
  | jq -r '.cid')

echo "Uploaded: $CID"

# 3. Cập nhật tên IPNS trỏ đến build mới
curl -X POST https://api.ipfs.ninja/ipns/publish \
  -H "X-Api-Key: bws_your_api_key" \
  -H "Content-Type: application/json" \
  -d "{\"ipnsName\": \"k51qzi5uqu5dlvj2bv6...\", \"cid\": \"$CID\"}"

# Trang web tại ipns://k51... giờ phục vụ phiên bản mới

Ví dụ 2: Siêu dữ liệu NFT có thể thay đổi

javascript
// Hợp đồng thông minh trỏ tokenURI đến địa chỉ IPNS:
// tokenURI = "ipns://k51qzi5uqu5dlvj2bv6..."

// Khi NFT tiến hóa (ví dụ: vật phẩm game lên cấp):
const newMetadata = {
  name: "Dragon Sword",
  description: "A legendary weapon — Level 5",
  image: "ipfs://QmNewImageCID...",
  attributes: [
    { trait_type: "Level", value: 5 },
    { trait_type: "Damage", value: 150 }
  ]
};

// Tải siêu dữ liệu mới
const uploadRes = await fetch("https://api.ipfs.ninja/upload/new", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": "bws_your_api_key"
  },
  body: JSON.stringify({ content: newMetadata, description: "Dragon Sword v5" })
});
const { cid } = await uploadRes.json();

// Cập nhật con trỏ IPNS -- tokenURI vẫn giữ nguyên!
await fetch("https://api.ipfs.ninja/ipns/publish", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": "bws_your_api_key"
  },
  body: JSON.stringify({ ipnsName: "k51qzi5uqu5dlvj2bv6...", cid })
});

Ví dụ 3: Tích hợp CI/CD

yaml
# GitHub Actions: tự động xuất bản lên IPNS mỗi lần push
- name: Upload to IPFS and publish IPNS
  run: |
    CID=$(curl -s -X POST https://api.ipfs.ninja/upload/new \
      -H "X-Api-Key: ${{ secrets.IPFS_NINJA_API_KEY }}" \
      -H "Content-Type: application/json" \
      -d '{"content": '"$(cat build/output.json)"', "description": "Deploy ${{ github.sha }}"}' \
      | jq -r '.cid')

    curl -X POST https://api.ipfs.ninja/ipns/publish \
      -H "X-Api-Key: ${{ secrets.IPFS_NINJA_API_KEY }}" \
      -H "Content-Type: application/json" \
      -d '{"ipnsName": "${{ vars.IPNS_NAME }}", "cid": "'"$CID"'"}'

Tham chiếu API

Tất cả ví dụ API sử dụng tiêu đề X-Api-Key. Lấy khóa API từ trang Khóa API.

Liệt kê Khóa IPNS

bash
curl https://api.ipfs.ninja/ipns/keys \
  -H "X-Api-Key: bws_your_api_key_here"

Phản hồi:

json
[
  {
    "ipnsName": "k51qzi5uqu5dlvj2bv6...",
    "keyName": "my-website",
    "currentCid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
    "lastPublishedAt": 1711123200000,
    "publishCountMonth": 12,
    "status": "active",
    "createdAt": 1711036800000
  }
]

Tạo Khóa IPNS

bash
curl -X POST https://api.ipfs.ninja/ipns/keys \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"name": "my-website"}'

Phản hồi 201:

json
{
  "ipnsName": "k51qzi5uqu5dlvj2bv6...",
  "keyName": "my-website",
  "createdAt": 1711036800000
}

Xuất bản lên IPNS

Xuất bản cập nhật tên IPNS để trỏ đến CID mới. Điều này lan truyền đến DHT IPFS và có thể mất tới 60 giây.

bash
curl -X POST https://api.ipfs.ninja/ipns/publish \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"ipnsName": "k51qzi5uqu5dlvj2bv6...", "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"}'

Phản hồi:

json
{
  "ipnsName": "k51qzi5uqu5dlvj2bv6...",
  "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
  "published": true
}

Phân giải Tên IPNS

Tra cứu CID hiện tại cho bất kỳ tên IPNS nào.

bash
curl https://api.ipfs.ninja/ipns/resolve/k51qzi5uqu5dlvj2bv6... \
  -H "X-Api-Key: bws_your_api_key_here"

Phản hồi:

json
{
  "ipnsName": "k51qzi5uqu5dlvj2bv6...",
  "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"
}

Xóa Khóa IPNS

bash
curl -X DELETE https://api.ipfs.ninja/ipns/keys/k51qzi5uqu5dlvj2bv6... \
  -H "X-Api-Key: bws_your_api_key_here"

Phản hồi:

json
{ "success": true }

Cách IPNS Hoạt động

  1. Tạo khóa: Khi bạn tạo tên IPNS, một cặp khóa mật mã (Ed25519) được tạo. Hash khóa công khai trở thành địa chỉ IPNS (k51...).
  2. Xuất bản: Khi bạn xuất bản, bạn ký một bản ghi nói "tên này trỏ đến CID X" và phát sóng đến DHT IPFS (Bảng Băm Phân tán).
  3. Phân giải: Khi ai đó tra cứu tên IPNS của bạn, các nút IPFS truy vấn DHT để tìm bản ghi đã ký mới nhất và theo dõi đến CID.
  4. Tái xuất bản: Bản ghi IPNS hết hạn sau 48 giờ. IPFS Ninja tự động tái xuất bản bản ghi của bạn mỗi 12 giờ để giữ chúng hoạt động.
  5. Bảo mật: Chỉ người nắm giữ khóa riêng (bạn) mới có thể cập nhật tên IPNS trỏ đến đâu. Không ai khác có thể chiếm đoạt tên của bạn.

Giới hạn Gói

GóiTên IPNSXuất bản / Tháng
Dharma (Miễn phí)Không có sẵn--
Bodhi ($5/tháng)3100
Nirvana ($29/tháng)101.000
  • Bản ghi được tự động tái xuất bản mỗi 12 giờ để giữ chúng hoạt động trên mạng IPFS.
  • Tên không được xuất bản trong 90 ngày được đánh dấu là không hoạt động và ngừng tái xuất bản.
  • Tên không hoạt động có thể được kích hoạt lại bằng cách xuất bản CID mới.

Đọc thêm