Cách lấy lịch sử giao dịch của một địa chỉ trên Ethereum

Vinh Phan

Chào mọi người, tiếp tục trong series blockchain, mình sẽ chia sẻ cho mọi người cách lấy toàn bộ lịch sử đã giao dịch của một địa chỉ ví nhé

Tìm hiểu cách tìm nạp tất cả NFT ERC-721 và ERC-1155 được chuyển bởi một địa chỉ Ethereum nhất định trong bất kỳ khoảng thời gian nào.

Điều gì xảy ra khi NFT được giao dịch?

Đằng sau ở logic, bất cứ khi nào NFT trải qua quá trình bán hoặc hoán đổi trên chuỗi, mọi lệnh gọi hợp đồng thông minh liên quan sẽ phát ra một sự kiện chuyển nhượng tiêu chuẩn vì tài sản cuối cùng sẽ được chuyển từ tài khoản này sang tài khoản khác.

Vì chúng ta có thể lọc cụ thể các sự kiện chuyển bằng API chuyển, nên chúng tôi có thể dễ dàng tìm nạp các giao dịch NFT với sự kết hợp phù hợp của các tham số bộ lọc!

Cách lấy Lịch sử giao dịch NFT

Để tìm nạp lịch sử giao dịch NFT theo một địa chỉ nhất định, chúng ta cần chỉ định một số điều trong yêu cầu alchemy_getAssetTransfers của mình:

fromAddress: nơi giao dịch NFT bắt nguồn từ khi tìm nạp lịch sử giao dịch NFT bắt nguồn từ một địa chỉ chúng tôi sử dụng địa chỉ này
toAddress: địa chỉ người nhận NFT khi tìm nạp lịch sử giao dịch NFT theo địa chỉ người nhận, chúng tôi sử dụng địa chỉ này
fromBlock: khoảng thời gian bắt đầu mà chúng tôi muốn tìm nạp các giao dịch NFT (mặc định là mới nhất)
toBlock: phạm vi thời gian kết thúc mà chúng tôi muốn tìm nạp các giao dịch NFT (mặc định là mới nhất)
category: loại sự kiện chuyển nhượng mà chúng tôi quan tâm, trong trường hợp của chúng tôi, chúng tôi muốn xem NFT là sự kiện ERC721 và ERC1155
Khi chúng ta đã chỉ định những đầu vào này, chúng ta có thể gửi yêu cầu!

Thực hiện tạo một lịch sử giao dịch

Cài đặt Alchemy SDK

npm install alchemy-sdk

Tạo 1 file

Trong thư mục hiện tại của bạn, hãy tạo một tệp mới có tên nft-tx-history-from-alchemy-sdk.js

Sử dụng trình duyệt tệp, trình soạn thảo mã yêu thích của bạn hoặc chỉ trực tiếp trong thiết bị đầu cuối bằng lệnh cảm ứng như sau:

touch nft-tx-history-from-alchemy-sdk.js

Cập nhật script

Sao chép và dán đoạn mã sau vào tệp mới của bạn: nft-tx-history-from-alchemy-sdk.js

// Setup: npm install alchemy-sdk
import { Alchemy, Network } from "alchemy-sdk";

const config = {
  // apiKey: "<-- ALCHEMY APP API KEY -->",
  network: Network.ETH_MAINNET,
};
const alchemy = new Alchemy(config);

// Address we want get NFT mints from
const fromAddress = "0x5c43B1eD97e52d009611D89b74fA829FE4ac56b1";

const res = await alchemy.core.getAssetTransfers({
  fromBlock: "0x0",
  fromAddress: fromAddress,
  excludeZeroValue: true,
  category: ["erc721", "erc1155"],
});

// Print contract address and tokenId for each NFT (ERC721 or ERC1155):
for (const events of res.transfers) {
  if (events.erc1155Metadata == null) {
    console.log(
      "ERC-721 Token Minted: ID- ",
      events.tokenId,
      " Contract- ",
      events.rawContract.address
    );
  } else {
    for (const erc1155 of events.erc1155Metadata) {
      console.log(
        "ERC-1155 Token Minted: ID- ",
        erc1155.tokenId,
        " Contract- ",
        events.rawContract.address
      );
    }
  }
}

Chạy script

Bây giờ, trên dòng lệnh của bạn, bạn có thể thực thi tập lệnh bằng cách gọi:

node nft-tx-history-from-alchemy-sdk.js

Cách xử lý phản hồi API

Chúng ta có bản in dòng lệnh trông như thế này:

{
  [
    {
      "blockNum": "0xc75329",
      "hash": "0xd89b54cb5aca6f501d43ee3363dcc892d31d1c185c9059c22d686ca0a1b93314",
      "from": "0x0000000000000000000000000000000000000000",
      "to": "0x5c43b1ed97e52d009611d89b74fa829fe4ac56b1",
      "value": null,
      "erc721TokenId": "0x0000000000000000000000000000000000000000000000000000000000000012",
      "erc1155Metadata": null,
      "tokenId": "0x0000000000000000000000000000000000000000000000000000000000000012",
      "asset": "BURN",
      "category": "erc721",
      "rawContract": {
        "value": null,
        "address": "0x18a808dd312736fc75eb967fc61990af726f04e4",
        "decimal": null
      }
    },
    ...
    {
      "blockNum": "0xd8315a",
      "hash": "0x270aa9026d69b0924341e0ce60b24182f1f2af8a4bcc752b8e65595bdeca565f",
      "from": "0x0000000000000000000000000000000000000000",
      "to": "0x5c43b1ed97e52d009611d89b74fa829fe4ac56b1",
      "value": null,
      "erc721TokenId": "0x00000000000000000000000000000000000000000000000000000000000000fb",
      "erc1155Metadata": null,
      "tokenId": "0x00000000000000000000000000000000000000000000000000000000000000fb",
      "asset": null,
      "category": "erc721",
      "rawContract": {
        "value": null,
        "address": "0x947600ad1ad2fadf88faf7d30193d363208fc76d",
        "decimal": null
      }
    }
  ]
}

Giải thích ý nghĩa:

Dưới đây là từng thành phần trong phản hồi của chúng tôi.

blockNum: số khối nơi xảy ra giao dịch NFT, ở dạng hex
hash: hàm băm giao dịch của giao dịch NFT
from: giao dịch bắt nguồn từ đâu
to: nơi nhận NFT
value: số lượng ETH được chuyển phải luôn bằng 0 trong trường hợp của chúng tôi vì chúng tôi chỉ xem xét các sự kiện chuyển NFT thường chỉ chuyển NFT chứ không phải ETH
erc721TokenId: ID mã thông báo ERC721. null nếu không phải là chuyển mã thông báo ERC721.
erc1155Metadata: danh sách các đối tượng chứa giá trị và tokenId ERC1155. null nếu không phải là chuyển khoản ERC1155
tokenId: ID mã thông báo cho mã thông báo ERC721 hoặc các tiêu chuẩn mã thông báo NFT khác
asset: ETH hoặc ký hiệu của mã thông báo. null nếu không được xác định trong hợp đồng và không có sẵn từ các nguồn khác.
rawContract
– value: null vì chúng tôi đang xem xét chuyển khoản ERC721 & ERC1155
– address: địa chỉ hợp đồng NFT
– decimal: null

Hi vọng giúp được cho bạn, xin cảm ơn!

Viết một bình luận