Wallet API đang ở giai đoạn Beta. Các endpoint và định dạng phản hồi có thể thay đổi.
Tổng quan
Endpoint Historical Balance trả lời câu hỏi: số dư của một token cụ thể (hoặc SOL gốc) trong ví này tại một thời điểm cụ thể trong quá khứ là bao nhiêu? Trong khi endpoint Balances báo cáo lượng nắm giữ hiện tại,balance-at báo cáo lượng nắm giữ tại bất kỳ dấu thời gian, thời điểm hoặc slot nào.
Endpoint này tìm giao dịch gần nhất xảy ra tại hoặc trước thời điểm được yêu cầu có liên quan đến ví và token, sau đó đọc số dư sau giao dịch của ví từ giao dịch đó. Số dư sau giao dịch là số dư được duy trì từ giao dịch đó cho đến giao dịch tiếp theo, vì vậy “số dư tại thời điểm T” là số dư sau giao dịch của giao dịch liên quan cuối cùng có thời gian khối (hoặc slot) tại hoặc trước T. Với ví thông thường, đây là giá trị chính xác, không phải ước tính.
- Token (SPL / Token-2022): được đọc từ số dư token sau giao dịch, cộng gộp trên các tài khoản token của ví cho mint đó.
- SOL gốc: được đọc từ số dư lamport sau giao dịch. Xác định SOL gốc bằng pseudo-mint
So11111111111111111111111111111111111111111.
Khi nào nên sử dụng
Sử dụng Historical Balance API cho các mục đích sau:- Tính PnL: xác định lượng nắm giữ ở đầu và cuối một kỳ.
- Giá vốn và lô thuế: tái dựng số dư tại các sự kiện mua hoặc bán.
- Giải quyết tranh chấp: chứng minh lượng tài sản mà ví nắm giữ tại một thời điểm cụ thể.
- Xác minh ảnh chụp nhanh: kiểm tra số dư ví tại thời điểm chụp nhanh cho airdrop hoặc quản trị.
- Kế toán và kiểm toán: tái dựng trạng thái ví tại ranh giới các kỳ.
Bắt đầu nhanh
Số dư token tại một dấu thời gian
Lấy số dư USDC của ví tại một dấu thời gian Unix:- JavaScript
- Python
- cURL
Số dư token tại một thời điểm
Truyền một thời điểm ở định dạng dễ đọc thay vì dấu thời gian. Hãy nhớ mã hóa URL cho dấu cách thành%20:
Số dư SOL gốc tại một slot
Đối với SOL gốc, hãy sử dụng pseudo-mintSo11111111111111111111111111111111111111111. Truy vấn dựa trên slot cho kết quả chính xác và xác định:
Tham số truy vấn
Phải cung cấp chính xác một trong các tham số
time, datetime hoặc slot. Nếu không cung cấp tham số nào hoặc cung cấp nhiều hơn một tham số, API sẽ trả về lỗi 400.
Định dạng thời điểm
Các định dạng được chấp nhận:- Chỉ ngày:
2025-01-10→ nửa đêm UTC - Ngày + giờ:
2025-01-10 19:20:00hoặc2025-01-10T19:20:00(không bắt buộc có giây) → UTC - Có múi giờ cụ thể:
2025-01-10T19:20:00Z,2025-01-10T19:20:00+02:00,2025-01-10T19:20:00-05:00→ được áp dụng theo giá trị đã cung cấp
01/10/2025, 2025-13-10, 2025-02-30) sẽ trả về lỗi 400.
Định dạng phản hồi
Ghi chú về các trường
wallet: lặp lại địa chỉ ví đã truy vấn.mint: lặp lại mint đã truy vấn (pseudo-mint SOL khi truy vấn SOL gốc).isNative:truekhi kết quả là SOL gốc.balance: số lượng dễ đọc ở dạng chuỗi thập phân — là chuỗi, không phải số, để số dư lớn không bị mất độ chính xác. Các số 0 ở cuối bị loại bỏ ("1.5", không phải"1.500000").balanceRaw: số lượng chính xác theo đơn vị nhỏ nhất (lamport đối với SOL), ở dạng chuỗi.decimals: số chữ số thập phân của token (9 đối với SOL).requested: lặp lại truy vấn. Khi sử dụngdatetime,timecũng được điền bằng số giây epoch đã phân giải, giúp hiển thị rõ cách diễn giải UTC.asOf: giao dịch dùng để đọc số dư (slot,blockTime,signature).
asOf: null có nghĩa là số dư bằng 0, không phải lỗi. Khi ví không có giao dịch khớp nào tại hoặc trước thời điểm được yêu cầu, endpoint trả về 200 cùng với balance: "0" và asOf: null — đơn giản là ví chưa từng nắm giữ token đó vào thời điểm ấy.
Trường hợp sử dụng
Thay đổi số dư trong một kỳ
So sánh lượng nắm giữ tại hai thời điểm:Kiểm tra điều kiện đủ tại thời điểm chụp nhanh
Xác minh một ví nắm giữ token tại slot chụp nhanh:Phương pháp hay nhất
- Sử dụng
slotđể nhận kết quả xác định.timevàdatetimeđược phân giải thông qua thời gian khối do trình xác thực báo cáo, có thể chênh lệch vài giây. Khi cần khả năng tái lập chính xác (ảnh chụp nhanh, kiểm toán), hãy truy vấn bằngslot. - Phân tích số dư dưới dạng chuỗi.
balancevàbalanceRawlà chuỗi để duy trì độ chính xác. Hãy sử dụngBigInt(balanceRaw)(hoặc số nguyên có độ chính xác tùy ý của ngôn ngữ bạn dùng) để tính toán — không ép kiểu thành số dấu phẩy động. - Coi
asOf: nulllà số 0.asOfcó giá trịnulllà một phản hồi thành công, nghĩa là ví không có hoạt động nào với token đó tính đến thời điểm được yêu cầu. Không xử lý trường hợp này như một lỗi. - Lưu kết quả trong quá khứ vào bộ nhớ đệm. Số dư tại một thời điểm trong quá khứ không bao giờ thay đổi. Hãy lưu kết quả vĩnh viễn vào bộ nhớ đệm để tránh gọi API nhiều lần.
Lỗi thường gặp
Hạn chế
- Ví có nhiều tài khoản token có thể bị tính thiếu. Số dư được đọc từ một giao dịch khớp gần nhất duy nhất. Trường hợp phổ biến — một tài khoản token liên kết cho mỗi mint — cho kết quả chính xác. Một ví nắm giữ cùng một mint trên nhiều tài khoản token có thể bị tính thiếu nếu giao dịch mới nhất chỉ tác động đến một số tài khoản trong đó.
- Độ chính xác của SOL gốc đối với số dư rất lớn. Đối với số dư SOL vượt quá khoảng 9.007.199 SOL (2⁵³ lamport), độ chính xác có thể bị mất ở thượng nguồn. Số lượng token không bị ảnh hưởng.
- Độ chính xác của
time/datetimephụ thuộc vào thời gian khối do trình xác thực báo cáo, có thể chênh lệch vài giây. Hãy sử dụngslotđể nhận kết quả chính xác và xác định. - Mỗi yêu cầu chỉ hỗ trợ một token. Không có dạng xử lý hàng loạt nhiều mint hoặc “tất cả số dư tại thời điểm T”.
Bước tiếp theo
Wallet Balances
Lấy lượng token và NFT hiện tại mà ví đang nắm giữ cùng giá trị USD.
Wallet API Overview
Tất cả endpoint của Wallet API và các quy ước chung.
API Reference
Lược đồ yêu cầu và phản hồi cho số dư trong quá khứ.