Примеры Transfers API
Примеры
Эти shell-примеры работают и на публичных Transfers и Transactions endpoint-ах. Если FASTNEAR_API_KEY уже задан в окружении, сниппеты автоматически пробросят его как bearer-заголовок.
Какая у этого аккаунта свежая активность по переводам?
/v0/transfers всего с account_id и desc: true возвращает самые свежие переводы, касающиеся этого аккаунта, по всем типам активов, в обоих направлениях сразу. В каждой строке уже есть human_amount, asset_id и transaction_id, так что этот поток заодно служит быстрым сканом активности до того, как вы достанете фильтры.
ACCOUNT_ID=root.near
AUTH_HEADER=()
if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi
curl -s "https://transfers.main.fastnear.com/v0/transfers" \
"${AUTH_HEADER[@]}" \
-H 'content-type: application/json' \
--data "$(jq -nc --arg account_id "$ACCOUNT_ID" '{account_id: $account_id, desc: true, limit: 5}')" \
| jq '{
recent: [.transfers[] | {
block_height,
asset_id,
human_amount,
other_account_id,
transfer_type,
tx: .transaction_id
}]
}'Для root.near последние строки смешивают активы FtTransfer и MtTransfer. asset_id использует URI по NEP-стандартам (native:near, nep141:..., nep245:...), так что одно поле уже подсказывает, к какому стандарту тянуться дальше. Положительный human_amount означает, что аккаунт получил; отрицательный — что отправил. other_account_id: null — норма для multi-token-форм, где контрагент сидит внутри границы контракта, а не как отдельный аккаунт верхнего уровня.
Отфильтровать и листать ленту переводов одного аккаунта
/v0/transfers возвращает отфильтрованную ленту плюс resume_token, который вы переиспользуете без изменения фильтров, чтобы продолжать листать. В каждой строке уже есть human_amount, usd_amount, transaction_id и receipt_id — большинство audit-вопросов закрываются без второго запроса.
ACCOUNT_ID=root.near
AUTH_HEADER=()
if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi
FEED="$(curl -s "https://transfers.main.fastnear.com/v0/transfers" \
"${AUTH_HEADER[@]}" \
-H 'content-type: application/json' \
--data "$(jq -nc --arg account_id "$ACCOUNT_ID" '{
account_id: $account_id,
direction: "receiver",
asset_id: "native:near",
min_amount: "1000000000000000000000000",
desc: true,
limit: 10
}')")"
echo "$FEED" | jq '{
resume_token,
transfers: [.transfers[] | {block_height, amount, human_amount, usd_amount, other_account_id, transaction_id, receipt_id}]
}'Для зафиксированного аккаунта это возвращает недавние входящие native-NEAR переводы не меньше 1 NEAR — в примерных строках видны native-переводы с escrow.ai.near и уже посчитанным USD. Чтобы получить следующую страницу, отправьте то же тело с верхнеуровневым resume_token: "<value>"; изменение любого другого фильтра делает токен недействительным.
Когда одной строке нужна точка исполнения, возьмите её receipt_id и сразу обратитесь к /v0/receipt:
ACCOUNT_ID=root.near
AUTH_HEADER=()
if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi
FEED="$(curl -s "https://transfers.main.fastnear.com/v0/transfers" \
"${AUTH_HEADER[@]}" \
-H 'content-type: application/json' \
--data "$(jq -nc --arg account_id "$ACCOUNT_ID" '{
account_id: $account_id,
direction: "receiver",
asset_id: "native:near",
min_amount: "1000000000000000000000000",
desc: true,
limit: 10
}')")"
RECEIPT_ID="$(echo "$FEED" | jq -r '.transfers[0].receipt_id')"
curl -s "https://tx.main.fastnear.com/v0/receipt" \
"${AUTH_HEADER[@]}" \
-H 'content-type: application/json' \
--data "$(jq -nc --arg receipt_id "$RECEIPT_ID" '{receipt_id: $receipt_id}')" \
| jq '.receipt | {receipt_id, transaction_hash, receiver_id, predecessor_id, tx_block_height, is_success}'Это тот же переход, что описан в Превратить один receipt ID в читаемую историю транзакции — один запрос возвращает и квитанцию, и её родительскую транзакцию целиком.
Частые ошибки
- Использовать Transfers API, когда пользователю на самом деле нужны балансы, активы или сводки аккаунта.
- Считать историю переводов полной историей исполнения.
- Переиспользовать
resume_tokenс другими фильтрами.