{"content_id":"gxi1phts28","slug":"usdc-deposit-verification-2026-chain-contract-transfer-bounty","locale":"en","schema_type":"HowTo","category":"how_to","category_name":"How-to","title":"USDC Deposit Verification 2026: Chain and Bounty Checks","summary":"Confirm USDC deposits using transfer records that match the chain, official contract, recipient address, and amount. Check transaction success and finality, then distinguish deposits from bounty payment promises, refunds, and self-transfers.","sponsorship_disclosure":null,"affiliate_disclosure":null,"commerce_disclosure":null,"author":{"name":"Injoys Editorial Team","url":"https://injoys.com/ko/about"},"key_points":["Confirm the agreed payment chain and official USDC contract address.","Confirm the recipient address on the selected chain in your wallet or with the receiving service.","Cross-check transaction success and Transfer events in the explorer for that chain.","Check the finality of the block containing the transaction.","Link the payment to the work, then classify refunds, self-transfers, and duplicate records separately."],"content_markdown":"Confirm a USDC deposit by checking for a transfer of the official token on the agreed chain. The recipient address and amount must match. Check transaction success and block finality separately as well. The reward amount in a posting or a hash alone is not enough to establish that a bounty has been paid.\n\nDouble-check addresses and chain IDs in the official Circle, Ethereum, and Base documentation. (Verified values: Ethereum Mainnet: chain ID 1, USDC contract 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48. Base Mainnet: chain ID 8453 0x2105 , USDC contract · Source: developers.circle.com · Checked on 2026-10-23)\n\n## USDC Contract Addresses and Chain IDs by Chain\n\nUSDC on Ethereum and Base uses different contract addresses. A chain ID is a number that identifies a network. A token contract address identifies a token on that chain. A recipient address is the address of the wallet or account that will receive payment.\n\nThis article was written and the documentation checked on October 23, 2026. The table below covers Circle-issued USDC on mainnet. A mainnet is a network that uses assets with real value.\n\n| Network | Chain ID, decimal | Chain ID, hexadecimal | Official USDC contract address | Explorer |\n|---|---:|---|---|---|\n| Ethereum Mainnet | 1 | `0x1` | `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` | Etherscan |\n| Base Mainnet | 8453 | `0x2105` | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` | BaseScan |\n\nThe contract addresses are based on [Circle's USDC contract addresses](https://developers.circle.com/stablecoins/usdc-contract-addresses). The Ethereum chain ID is specified in [EIP-155](https://eips.ethereum.org/EIPS/eip-155). The Base chain ID can be checked in [Base's eth_chainId documentation](https://docs.base.org/base-chain/api-reference/ethereum-json-rpc-api/eth_chainId).\n\nEven an identical recipient address string has separate records on different chains. A deposit on Ethereum is not automatically added to a Base balance. Do not count USDC on testnets such as Sepolia as actual payment.\n\n## Steps for Checking the Recipient Address and Transaction\n\nEstablishing the payment terms first makes it harder to mistake another transaction for payment. This process involves reading public transaction records. You do not need to connect a wallet or sign anything to look up a transaction in an explorer.\n\n1. Check the network and token in the payment agreement. Distinguish the dollar amount shown in the posting from the actual amount of USDC to be paid.\n2. Copy the recipient address for that network from the receiving wallet. If you use an exchange, use that service's deposit screen as your reference. Also check which networks the service supports.\n3. Find the contract address for that chain in Circle's Mainnet table. Do not rely on the token name or logo alone.\n4. Search for the txHash in that chain's explorer. A txHash is an identifier used to find a transaction. If there are no search results, check the network and hash again.\n5. Check the status and token transfer records in the transaction details. Then compare them with the actual Transfer event in the Logs tab.\n\nA hash that cannot be found is not yet evidence of a deposit. However, a failed lookup alone does not prove that the other party is committing fraud. First check for the wrong chain or an error in copying the hash.\n\n## What to Check in a Transfer Event\n\nDetermine whether tokens were received by checking the Transfer event emitted by the USDC contract. The To field at the top of the transaction may be the contract that was called. Check the `to` field within the event for the address that received the tokens.\n\nThe ERC-20 standard defines the transfer event as follows.\n\n\u003e MUST trigger when tokens are transferred, including zero value transfers.\n\u003e\n\u003e Source: ERC-20: Token Standard, Transfer section\n\nThis rule includes transfers with an amount of 0. Therefore, the existence of an event alone must not be accepted as evidence of payment. The original text is available in [ERC-20: Token Standard](https://eips.ethereum.org/EIPS/eip-20).\n\n| Item to check | Where to read it | Passing criterion |\n|---|---|---|\n| Transaction execution result | Status or `status` in the receipt | Success or `0x1` |\n| Contract that emitted the log | `address` in the log | Matches the official USDC contract on that chain |\n| Event type | Event name and signature | `Transfer(address,address,uint256)` |\n| Token sender address | `from` in the event | A source that can be linked to the supporting payment records |\n| Token recipient address | `to` in the event | Matches the entire recipient address checked in advance |\n| Actual amount | `value` in the event | The amount after applying decimal places matches the payment terms |\n| Containing block | `blockNumber`, `blockHash` | Hash matches the block at the same height on the current chain |\n| Finality | Finalization status of that block | Checked separately using the finality procedure below |\n\nA payment-processing contract may send the tokens. The transaction sender and the employer's address are therefore not always the same. Compare the job number and payment details as well. An address alone cannot establish the actual payer's identity.\n\n### How to Read Raw Logs\n\nAddresses and amounts are encoded in raw logs. `topics[0]` is the hash of the event signature. The sender address for a standard USDC Transfer is in `topics[1]`. The recipient address is in `topics[2]`.\n\n- Address: Interpret the last 20 bytes of the relevant topic as an address.\n- Amount: Interpret `data` as an unsigned integer.\n- Decimal places: Convert the amount using the official contract's `decimals()` value.\n- Approval event: `Approval` records permission to use tokens.\n\nThe USDC contracts on Ethereum and Base listed here use 6 decimal places. Divide the raw amount by 1,000,000 to read it in USDC units. Do not apply ETH's decimal places. The layout of the log display is explained in [Etherscan's Event Logs](https://info.etherscan.com/what-is-event-logs/).\n\n## The Difference Between Transaction Success and Finality\n\nSuccess means the transaction executed successfully. It does not mean the block has been finalized. Finality is the state in which a block is final under the consensus rules. In this article, a fully confirmed deposit is a record whose finality has also been checked.\n\n| Network | Status that can be observed first | Final confirmation criterion |\n|---|---|---|\n| Ethereum | Transaction included in a block and successful | Transaction block falls within the finalized range |\n| Base | Preconfirmation or inclusion in an L2 block | The relevant L2 block reaches L1 batch finality |\n\nTransfers within Base and withdrawals to Ethereum follow different procedures. Do not apply the withdrawal waiting period directly to deposits within Base. Base distinguishes block inclusion from L1 batch finality. The source is [Base's Transaction Finality](https://docs.base.org/specifications/transactions/transaction-finality).\n\n### When Finality Is Not Clear in the Explorer\n\nIf finality is not shown, you can leave the confirmation status pending. Developers can recheck it through a trusted RPC for that chain. RPC is an interface for requesting data from a blockchain node.\n\n1. Check the connected chain using `eth_chainId`.\n2. Read the receipt using `eth_getTransactionReceipt`. Check `status`, the logs, the block number, and the block hash.\n3. Query the same block number using `eth_getBlockByNumber`. Check whether the returned hash matches the receipt's `blockHash`.\n4. Pass `finalized` and `false` to `eth_getBlockByNumber`. Check whether the returned block height is at least the transaction block height. For Base transactions, compare against the finalized block from the Base RPC.\n\nIf the receipt is `null`, that response cannot confirm inclusion. Do not use a response that does not support finalized queries to mark the check as successful, either. Do not reinterpret `latest` or a simple confirmation count as finalized. The methods are explained in [Ethereum JSON-RPC](https://ethereum.org/developers/docs/apis/json-rpc/) and [Base's block query documentation](https://docs.base.org/base-chain/api-reference/ethereum-json-rpc-api/eth_getBlockByNumber).\n\n## Calculation Example: A Synthetic 100 USDC Deposit\n\nThe following is a synthetic verification example, not an actual payment case. Assume the payment terms are 100 USDC on Base. The addresses and log index are made-up values for illustration. Do not use the example address as an actual recipient address.\n\n| Item | Synthetic example value |\n|---|---|\n| Chain | Base Mainnet, chain ID 8453 |\n| Contract that emitted the log | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |\n| Token sender address | `0x2222222222222222222222222222222222222222` |\n| Agreed recipient address | `0x1111111111111111111111111111111111111111` |\n| Recipient address in Transfer | `0x1111111111111111111111111111111111111111` |\n| Raw amount | 100,000,000 smallest units |\n| Decimal places | 6 places |\n| Converted amount | 100,000,000 ÷ 1,000,000 = 100 USDC |\n| Transaction status | `status = 0x1` |\n| Transaction identifier | H, a symbol standing in for an actual txHash |\n| Log position | `logIndex = 7`, a synthetic value |\n| Finality | Assume the transaction block falls within the finalized range |\n\nUnder these conditions, the amount received is **100 USDC**. Assume that the block hash match for H has also been checked. Separate evidence is needed to link it to payment for work from an external payer.\n\nIf the recipient address is a different address, do not count it as your deposit. If the posting only stated 100 dollars, the payment amount must also be checked separately. Receiving 100 USDC does not mean receiving 100 dollars in cash.\n\n## Comparing Deposit Evidence by Bounty Status\n\nRecord the bounty's progress and the wallet's deposit status separately. A bounty is a reward attached to a specified task. The categories below are criteria for managing payment evidence. They do not replace a determination of legal claims or revenue for tax purposes.\n\n| What was checked | What it proves | Deposit tracking status |\n|---|---|---|\n| 100 dollars in the posting | Reward terms shown in the posting | Reviewing payment promise |\n| Job offer or selection message | A work offer or the fact of selection | Job award stage |\n| Work completed and review approved | Work progress on the platform | Payment must be checked separately |\n| Escrow deposit | Funds moved to a separate holding address | Not yet received by you |\n| ERC-20 Approval | Permission for a designated party to use tokens | Not evidence of a token transfer |\n| txHash exists, but transfer is to another address | A transfer to that address | Not your deposit |\n| Successful transfer to your address, finality unchecked | An executed transfer | Awaiting finality |\n| Fully confirmed external deposit to your address | On-chain receipt | Check the link to payment for work |\n| Final deposit matches the job's payment details | Evidence of receipt linked to that job | Payment receipt confirmed |\n\nEscrow is a way of holding funds separately until conditions are met. The fact that funds are being held does not mean they have been paid to your wallet. Platform approval and ERC-20 Approval are also different concepts.\n\nLink a job number or invoice even to a final deposit. Transaction records alone do not reveal the payment's purpose. Compare the payment date as well to avoid confusing it with another deposit of the same amount.\n\n## Common Mistakes When Counting New Work Payments\n\nDo not add up all USDC entering your wallet as payment for new work. Receipt and economic purpose are separate fields. The checklist below provides criteria for organizing an operational deposit ledger.\n\n- Refunds: Link returned amounts to the original expense.\n- Self-transfers: Distinguish transfers between wallets you control.\n- Bridge transfers: Separate movements of your own assets between chains from new customer payments.\n- Spam tokens: Check the official contract address rather than the USDC name.\n- Bridged representation tokens: If the contract differs, record them as assets separate from Circle-issued USDC.\n- 0-amount events: Do not count them as payment even if there is a Transfer.\n- Duplicate lookups: Do not count the same event once from the explorer and again from the API.\n- Reused evidence: Do not reassign a deposit already linked to another job.\n- Self-circulation: Check both outgoing and returning funds in the same transaction.\n- Subsequent returns: If you returned a payment you received, link it to the original receipt record.\n\n### Fields to Record to Prevent Duplicates\n\nEvents can be distinguished using `chainId + txHash + logIndex`. A single transaction can contain multiple transfer events. Combining all events into one record based only on txHash can therefore cause omissions.\n\n| Field to store | Purpose |\n|---|---|\n| Chain ID, token contract address | Identify the network and asset |\n| txHash, logIndex | Distinguish transfer events |\n| blockNumber, blockHash | Recheck the containing block |\n| Sender address, recipient address | Check the direction of fund movement |\n| Raw amount, decimals, USDC amount | Reproduce the unit conversion |\n| Block time, verification time, time zone | Distinguish transfer time from verification time |\n| Finality status | Distinguish pending records from final records |\n| Job number, invoice, payment details | Link the deposit to its purpose |\n| Refund, self-transfer, and duplicate classifications | Prevent overstating payments for new work |\n\nRecheck records if a block reorganization occurs before finality. Removed logs must be excluded from the existing provisional total. Track total work payments separately from the wallet balance. The balance also reflects earlier holdings and subsequent withdrawals.\n\n## 5-Minute Verification Checklist\n\nThis table lists items to check over about 5 minutes. It does not guarantee that blockchain finality will be reached within that time. Leave any item you cannot verify as pending.\n\n| Step | Check question | Result to record |\n|---:|---|---|\n| 1 | Do you know the chain and amount in the payment terms? | Agreed network and USDC amount |\n| 2 | Does the receiving service support that chain? | Recipient address and support status |\n| 3 | Does the log's contract match the Circle address? | Whether the official contract matches |\n| 4 | Did the transaction succeed and transfer tokens to your address? | Status and Transfer recipient address |\n| 5 | Did you convert the raw amount correctly? | Actual USDC amount |\n| 6 | Did you check the containing block and finality? | Block hash and finalization status |\n| 7 | Can it be linked to an external payment for that job? | Job number and supporting payment evidence |\n| 8 | Did you separate refunds, self-transfers, and duplicates? | Classification result and event identifier |\n\nThe first check may not provide enough payment evidence. If so, request the missing chain name or txHash. If the transfer went to another address, explain the specific mismatch.\n\n## Frequently Asked Questions\n\n### Is a deposit complete once I receive a txHash?\n\nA hash alone cannot confirm that a deposit is complete. Even a successful transaction may have a different recipient address. Check the contract, recipient address, amount, and finality together.\n\n### What if the status is Success but I cannot see the wallet balance?\n\nFirst compare the event's recipient address and the official contract. If they match, check the selected network and token display. The receiving service's internal crediting status must also be checked separately.\n\n### Can I look for a Base deposit on Ethereum?\n\nLook up Base transactions in a Base explorer. Records are separate for each chain even if the same address is used. Do not conclude that a Base deposit is missing based only on Ethereum search results.\n\n### If 0 ETH appears at the top of the transaction, does that mean no deposit was made?\n\nA 0 ETH display is not evidence that no USDC was transferred. The transaction's ETH amount and ERC-20 token amount are separate. Check the USDC amount in the Transfer event.\n\n### Is a fully confirmed external deposit new revenue?\n\nAn external deposit alone cannot establish new revenue from work. It could be a refund or a transfer for another purpose. Use invoices and payment details to link the deposit to its purpose.\n\n### Can I calculate taxes based on deposit verification results?\n\nThis procedure is for checking evidence of on-chain receipt. It does not determine an individual's tax outcome. For Korean tax guidance, see the National Tax Service's [Overview of Global Income Tax](https://www.nts.go.kr/nts/cm/cntnts/cntntsView.do?cntntsId=7664\u0026mi=2224).","content_html":"\u003cp\u003eConfirm a USDC deposit by checking for a transfer of the official token on the agreed chain. The recipient address and amount must match. Check transaction success and block finality separately as well. The reward amount in a posting or a hash alone is not enough to establish that a bounty has been paid.\u003c/p\u003e\n\u003cp\u003eDouble-check addresses and chain IDs in the official Circle, Ethereum, and Base documentation. (Verified values: Ethereum Mainnet: chain ID 1, USDC contract 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48. Base Mainnet: chain ID 8453 0x2105 , USDC contract · Source: developers.circle.com · Checked on 2026-10-23)\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#usdc-contract-addresses-and-chain-ids-by-chain\" class=\"anchor\" id=\"usdc-contract-addresses-and-chain-ids-by-chain\"\u003e\u003c/a\u003eUSDC Contract Addresses and Chain IDs by Chain\u003c/h2\u003e\n\u003cp\u003eUSDC on Ethereum and Base uses different contract addresses. A chain ID is a number that identifies a network. A token contract address identifies a token on that chain. A recipient address is the address of the wallet or account that will receive payment.\u003c/p\u003e\n\u003cp\u003eThis article was written and the documentation checked on October 23, 2026. The table below covers Circle-issued USDC on mainnet. A mainnet is a network that uses assets with real value.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eNetwork\u003c/th\u003e\n\u003cth\u003eChain ID, decimal\u003c/th\u003e\n\u003cth\u003eChain ID, hexadecimal\u003c/th\u003e\n\u003cth\u003eOfficial USDC contract address\u003c/th\u003e\n\u003cth\u003eExplorer\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Network\"\u003eEthereum Mainnet\u003c/td\u003e\n\u003ctd data-label=\"Chain ID, decimal\"\u003e1\u003c/td\u003e\n\u003ctd data-label=\"Chain ID, hexadecimal\"\u003e\u003ccode\u003e0x1\u003c/code\u003e\u003c/td\u003e\n\u003ctd data-label=\"Official USDC contract address\"\u003e\u003ccode\u003e0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\u003c/code\u003e\u003c/td\u003e\n\u003ctd data-label=\"Explorer\"\u003eEtherscan\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Network\"\u003eBase Mainnet\u003c/td\u003e\n\u003ctd data-label=\"Chain ID, decimal\"\u003e8453\u003c/td\u003e\n\u003ctd data-label=\"Chain ID, hexadecimal\"\u003e\u003ccode\u003e0x2105\u003c/code\u003e\u003c/td\u003e\n\u003ctd data-label=\"Official USDC contract address\"\u003e\u003ccode\u003e0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\u003c/code\u003e\u003c/td\u003e\n\u003ctd data-label=\"Explorer\"\u003eBaseScan\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eThe contract addresses are based on \u003ca href=\"https://developers.circle.com/stablecoins/usdc-contract-addresses\"\u003eCircle's USDC contract addresses\u003c/a\u003e. The Ethereum chain ID is specified in \u003ca href=\"https://eips.ethereum.org/EIPS/eip-155\"\u003eEIP-155\u003c/a\u003e. The Base chain ID can be checked in \u003ca href=\"https://docs.base.org/base-chain/api-reference/ethereum-json-rpc-api/eth_chainId\"\u003eBase's eth_chainId documentation\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eEven an identical recipient address string has separate records on different chains. A deposit on Ethereum is not automatically added to a Base balance. Do not count USDC on testnets such as Sepolia as actual payment.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#steps-for-checking-the-recipient-address-and-transaction\" class=\"anchor\" id=\"steps-for-checking-the-recipient-address-and-transaction\"\u003e\u003c/a\u003eSteps for Checking the Recipient Address and Transaction\u003c/h2\u003e\n\u003cp\u003eEstablishing the payment terms first makes it harder to mistake another transaction for payment. This process involves reading public transaction records. You do not need to connect a wallet or sign anything to look up a transaction in an explorer.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eCheck the network and token in the payment agreement. Distinguish the dollar amount shown in the posting from the actual amount of USDC to be paid.\u003c/li\u003e\n\u003cli\u003eCopy the recipient address for that network from the receiving wallet. If you use an exchange, use that service's deposit screen as your reference. Also check which networks the service supports.\u003c/li\u003e\n\u003cli\u003eFind the contract address for that chain in Circle's Mainnet table. Do not rely on the token name or logo alone.\u003c/li\u003e\n\u003cli\u003eSearch for the txHash in that chain's explorer. A txHash is an identifier used to find a transaction. If there are no search results, check the network and hash again.\u003c/li\u003e\n\u003cli\u003eCheck the status and token transfer records in the transaction details. Then compare them with the actual Transfer event in the Logs tab.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eA hash that cannot be found is not yet evidence of a deposit. However, a failed lookup alone does not prove that the other party is committing fraud. First check for the wrong chain or an error in copying the hash.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#what-to-check-in-a-transfer-event\" class=\"anchor\" id=\"what-to-check-in-a-transfer-event\"\u003e\u003c/a\u003eWhat to Check in a Transfer Event\u003c/h2\u003e\n\u003cp\u003eDetermine whether tokens were received by checking the Transfer event emitted by the USDC contract. The To field at the top of the transaction may be the contract that was called. Check the \u003ccode\u003eto\u003c/code\u003e field within the event for the address that received the tokens.\u003c/p\u003e\n\u003cp\u003eThe ERC-20 standard defines the transfer event as follows.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMUST trigger when tokens are transferred, including zero value transfers.\u003c/p\u003e\n\u003cp\u003eSource: ERC-20: Token Standard, Transfer section\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis rule includes transfers with an amount of 0. Therefore, the existence of an event alone must not be accepted as evidence of payment. The original text is available in \u003ca href=\"https://eips.ethereum.org/EIPS/eip-20\"\u003eERC-20: Token Standard\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eItem to check\u003c/th\u003e\n\u003cth\u003eWhere to read it\u003c/th\u003e\n\u003cth\u003ePassing criterion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item to check\"\u003eTransaction execution result\u003c/td\u003e\n\u003ctd data-label=\"Where to read it\"\u003eStatus or \u003ccode\u003estatus\u003c/code\u003e in the receipt\u003c/td\u003e\n\u003ctd data-label=\"Passing criterion\"\u003eSuccess or \u003ccode\u003e0x1\u003c/code\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item to check\"\u003eContract that emitted the log\u003c/td\u003e\n\u003ctd data-label=\"Where to read it\"\u003e\n\u003ccode\u003eaddress\u003c/code\u003e in the log\u003c/td\u003e\n\u003ctd data-label=\"Passing criterion\"\u003eMatches the official USDC contract on that chain\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item to check\"\u003eEvent type\u003c/td\u003e\n\u003ctd data-label=\"Where to read it\"\u003eEvent name and signature\u003c/td\u003e\n\u003ctd data-label=\"Passing criterion\"\u003e\u003ccode\u003eTransfer(address,address,uint256)\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item to check\"\u003eToken sender address\u003c/td\u003e\n\u003ctd data-label=\"Where to read it\"\u003e\n\u003ccode\u003efrom\u003c/code\u003e in the event\u003c/td\u003e\n\u003ctd data-label=\"Passing criterion\"\u003eA source that can be linked to the supporting payment records\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item to check\"\u003eToken recipient address\u003c/td\u003e\n\u003ctd data-label=\"Where to read it\"\u003e\n\u003ccode\u003eto\u003c/code\u003e in the event\u003c/td\u003e\n\u003ctd data-label=\"Passing criterion\"\u003eMatches the entire recipient address checked in advance\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item to check\"\u003eActual amount\u003c/td\u003e\n\u003ctd data-label=\"Where to read it\"\u003e\n\u003ccode\u003evalue\u003c/code\u003e in the event\u003c/td\u003e\n\u003ctd data-label=\"Passing criterion\"\u003eThe amount after applying decimal places matches the payment terms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item to check\"\u003eContaining block\u003c/td\u003e\n\u003ctd data-label=\"Where to read it\"\u003e\n\u003ccode\u003eblockNumber\u003c/code\u003e, \u003ccode\u003eblockHash\u003c/code\u003e\n\u003c/td\u003e\n\u003ctd data-label=\"Passing criterion\"\u003eHash matches the block at the same height on the current chain\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item to check\"\u003eFinality\u003c/td\u003e\n\u003ctd data-label=\"Where to read it\"\u003eFinalization status of that block\u003c/td\u003e\n\u003ctd data-label=\"Passing criterion\"\u003eChecked separately using the finality procedure below\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eA payment-processing contract may send the tokens. The transaction sender and the employer's address are therefore not always the same. Compare the job number and payment details as well. An address alone cannot establish the actual payer's identity.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#how-to-read-raw-logs\" class=\"anchor\" id=\"how-to-read-raw-logs\"\u003e\u003c/a\u003eHow to Read Raw Logs\u003c/h3\u003e\n\u003cp\u003eAddresses and amounts are encoded in raw logs. \u003ccode\u003etopics[0]\u003c/code\u003e is the hash of the event signature. The sender address for a standard USDC Transfer is in \u003ccode\u003etopics[1]\u003c/code\u003e. The recipient address is in \u003ccode\u003etopics[2]\u003c/code\u003e.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAddress: Interpret the last 20 bytes of the relevant topic as an address.\u003c/li\u003e\n\u003cli\u003eAmount: Interpret \u003ccode\u003edata\u003c/code\u003e as an unsigned integer.\u003c/li\u003e\n\u003cli\u003eDecimal places: Convert the amount using the official contract's \u003ccode\u003edecimals()\u003c/code\u003e value.\u003c/li\u003e\n\u003cli\u003eApproval event: \u003ccode\u003eApproval\u003c/code\u003e records permission to use tokens.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe USDC contracts on Ethereum and Base listed here use 6 decimal places. Divide the raw amount by 1,000,000 to read it in USDC units. Do not apply ETH's decimal places. The layout of the log display is explained in \u003ca href=\"https://info.etherscan.com/what-is-event-logs/\"\u003eEtherscan's Event Logs\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#the-difference-between-transaction-success-and-finality\" class=\"anchor\" id=\"the-difference-between-transaction-success-and-finality\"\u003e\u003c/a\u003eThe Difference Between Transaction Success and Finality\u003c/h2\u003e\n\u003cp\u003eSuccess means the transaction executed successfully. It does not mean the block has been finalized. Finality is the state in which a block is final under the consensus rules. In this article, a fully confirmed deposit is a record whose finality has also been checked.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eNetwork\u003c/th\u003e\n\u003cth\u003eStatus that can be observed first\u003c/th\u003e\n\u003cth\u003eFinal confirmation criterion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Network\"\u003eEthereum\u003c/td\u003e\n\u003ctd data-label=\"Status that can be observed first\"\u003eTransaction included in a block and successful\u003c/td\u003e\n\u003ctd data-label=\"Final confirmation criterion\"\u003eTransaction block falls within the finalized range\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Network\"\u003eBase\u003c/td\u003e\n\u003ctd data-label=\"Status that can be observed first\"\u003ePreconfirmation or inclusion in an L2 block\u003c/td\u003e\n\u003ctd data-label=\"Final confirmation criterion\"\u003eThe relevant L2 block reaches L1 batch finality\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eTransfers within Base and withdrawals to Ethereum follow different procedures. Do not apply the withdrawal waiting period directly to deposits within Base. Base distinguishes block inclusion from L1 batch finality. The source is \u003ca href=\"https://docs.base.org/specifications/transactions/transaction-finality\"\u003eBase's Transaction Finality\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#when-finality-is-not-clear-in-the-explorer\" class=\"anchor\" id=\"when-finality-is-not-clear-in-the-explorer\"\u003e\u003c/a\u003eWhen Finality Is Not Clear in the Explorer\u003c/h3\u003e\n\u003cp\u003eIf finality is not shown, you can leave the confirmation status pending. Developers can recheck it through a trusted RPC for that chain. RPC is an interface for requesting data from a blockchain node.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eCheck the connected chain using \u003ccode\u003eeth_chainId\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRead the receipt using \u003ccode\u003eeth_getTransactionReceipt\u003c/code\u003e. Check \u003ccode\u003estatus\u003c/code\u003e, the logs, the block number, and the block hash.\u003c/li\u003e\n\u003cli\u003eQuery the same block number using \u003ccode\u003eeth_getBlockByNumber\u003c/code\u003e. Check whether the returned hash matches the receipt's \u003ccode\u003eblockHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ePass \u003ccode\u003efinalized\u003c/code\u003e and \u003ccode\u003efalse\u003c/code\u003e to \u003ccode\u003eeth_getBlockByNumber\u003c/code\u003e. Check whether the returned block height is at least the transaction block height. For Base transactions, compare against the finalized block from the Base RPC.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eIf the receipt is \u003ccode\u003enull\u003c/code\u003e, that response cannot confirm inclusion. Do not use a response that does not support finalized queries to mark the check as successful, either. Do not reinterpret \u003ccode\u003elatest\u003c/code\u003e or a simple confirmation count as finalized. The methods are explained in \u003ca href=\"https://ethereum.org/developers/docs/apis/json-rpc/\"\u003eEthereum JSON-RPC\u003c/a\u003e and \u003ca href=\"https://docs.base.org/base-chain/api-reference/ethereum-json-rpc-api/eth_getBlockByNumber\"\u003eBase's block query documentation\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#calculation-example-a-synthetic-100-usdc-deposit\" class=\"anchor\" id=\"calculation-example-a-synthetic-100-usdc-deposit\"\u003e\u003c/a\u003eCalculation Example: A Synthetic 100 USDC Deposit\u003c/h2\u003e\n\u003cp\u003eThe following is a synthetic verification example, not an actual payment case. Assume the payment terms are 100 USDC on Base. The addresses and log index are made-up values for illustration. Do not use the example address as an actual recipient address.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eItem\u003c/th\u003e\n\u003cth\u003eSynthetic example value\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eChain\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003eBase Mainnet, chain ID 8453\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eContract that emitted the log\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003e\u003ccode\u003e0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eToken sender address\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003e\u003ccode\u003e0x2222222222222222222222222222222222222222\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eAgreed recipient address\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003e\u003ccode\u003e0x1111111111111111111111111111111111111111\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eRecipient address in Transfer\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003e\u003ccode\u003e0x1111111111111111111111111111111111111111\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eRaw amount\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003e100,000,000 smallest units\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eDecimal places\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003e6 places\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eConverted amount\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003e100,000,000 ÷ 1,000,000 = 100 USDC\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eTransaction status\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003e\u003ccode\u003estatus = 0x1\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eTransaction identifier\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003eH, a symbol standing in for an actual txHash\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eLog position\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003e\n\u003ccode\u003elogIndex = 7\u003c/code\u003e, a synthetic value\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Item\"\u003eFinality\u003c/td\u003e\n\u003ctd data-label=\"Synthetic example value\"\u003eAssume the transaction block falls within the finalized range\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eUnder these conditions, the amount received is \u003cstrong\u003e100 USDC\u003c/strong\u003e. Assume that the block hash match for H has also been checked. Separate evidence is needed to link it to payment for work from an external payer.\u003c/p\u003e\n\u003cp\u003eIf the recipient address is a different address, do not count it as your deposit. If the posting only stated 100 dollars, the payment amount must also be checked separately. Receiving 100 USDC does not mean receiving 100 dollars in cash.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#comparing-deposit-evidence-by-bounty-status\" class=\"anchor\" id=\"comparing-deposit-evidence-by-bounty-status\"\u003e\u003c/a\u003eComparing Deposit Evidence by Bounty Status\u003c/h2\u003e\n\u003cp\u003eRecord the bounty's progress and the wallet's deposit status separately. A bounty is a reward attached to a specified task. The categories below are criteria for managing payment evidence. They do not replace a determination of legal claims or revenue for tax purposes.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eWhat was checked\u003c/th\u003e\n\u003cth\u003eWhat it proves\u003c/th\u003e\n\u003cth\u003eDeposit tracking status\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was checked\"\u003e100 dollars in the posting\u003c/td\u003e\n\u003ctd data-label=\"What it proves\"\u003eReward terms shown in the posting\u003c/td\u003e\n\u003ctd data-label=\"Deposit tracking status\"\u003eReviewing payment promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was checked\"\u003eJob offer or selection message\u003c/td\u003e\n\u003ctd data-label=\"What it proves\"\u003eA work offer or the fact of selection\u003c/td\u003e\n\u003ctd data-label=\"Deposit tracking status\"\u003eJob award stage\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was checked\"\u003eWork completed and review approved\u003c/td\u003e\n\u003ctd data-label=\"What it proves\"\u003eWork progress on the platform\u003c/td\u003e\n\u003ctd data-label=\"Deposit tracking status\"\u003ePayment must be checked separately\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was checked\"\u003eEscrow deposit\u003c/td\u003e\n\u003ctd data-label=\"What it proves\"\u003eFunds moved to a separate holding address\u003c/td\u003e\n\u003ctd data-label=\"Deposit tracking status\"\u003eNot yet received by you\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was checked\"\u003eERC-20 Approval\u003c/td\u003e\n\u003ctd data-label=\"What it proves\"\u003ePermission for a designated party to use tokens\u003c/td\u003e\n\u003ctd data-label=\"Deposit tracking status\"\u003eNot evidence of a token transfer\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was checked\"\u003etxHash exists, but transfer is to another address\u003c/td\u003e\n\u003ctd data-label=\"What it proves\"\u003eA transfer to that address\u003c/td\u003e\n\u003ctd data-label=\"Deposit tracking status\"\u003eNot your deposit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was checked\"\u003eSuccessful transfer to your address, finality unchecked\u003c/td\u003e\n\u003ctd data-label=\"What it proves\"\u003eAn executed transfer\u003c/td\u003e\n\u003ctd data-label=\"Deposit tracking status\"\u003eAwaiting finality\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was checked\"\u003eFully confirmed external deposit to your address\u003c/td\u003e\n\u003ctd data-label=\"What it proves\"\u003eOn-chain receipt\u003c/td\u003e\n\u003ctd data-label=\"Deposit tracking status\"\u003eCheck the link to payment for work\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"What was checked\"\u003eFinal deposit matches the job's payment details\u003c/td\u003e\n\u003ctd data-label=\"What it proves\"\u003eEvidence of receipt linked to that job\u003c/td\u003e\n\u003ctd data-label=\"Deposit tracking status\"\u003ePayment receipt confirmed\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eEscrow is a way of holding funds separately until conditions are met. The fact that funds are being held does not mean they have been paid to your wallet. Platform approval and ERC-20 Approval are also different concepts.\u003c/p\u003e\n\u003cp\u003eLink a job number or invoice even to a final deposit. Transaction records alone do not reveal the payment's purpose. Compare the payment date as well to avoid confusing it with another deposit of the same amount.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#common-mistakes-when-counting-new-work-payments\" class=\"anchor\" id=\"common-mistakes-when-counting-new-work-payments\"\u003e\u003c/a\u003eCommon Mistakes When Counting New Work Payments\u003c/h2\u003e\n\u003cp\u003eDo not add up all USDC entering your wallet as payment for new work. Receipt and economic purpose are separate fields. The checklist below provides criteria for organizing an operational deposit ledger.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRefunds: Link returned amounts to the original expense.\u003c/li\u003e\n\u003cli\u003eSelf-transfers: Distinguish transfers between wallets you control.\u003c/li\u003e\n\u003cli\u003eBridge transfers: Separate movements of your own assets between chains from new customer payments.\u003c/li\u003e\n\u003cli\u003eSpam tokens: Check the official contract address rather than the USDC name.\u003c/li\u003e\n\u003cli\u003eBridged representation tokens: If the contract differs, record them as assets separate from Circle-issued USDC.\u003c/li\u003e\n\u003cli\u003e0-amount events: Do not count them as payment even if there is a Transfer.\u003c/li\u003e\n\u003cli\u003eDuplicate lookups: Do not count the same event once from the explorer and again from the API.\u003c/li\u003e\n\u003cli\u003eReused evidence: Do not reassign a deposit already linked to another job.\u003c/li\u003e\n\u003cli\u003eSelf-circulation: Check both outgoing and returning funds in the same transaction.\u003c/li\u003e\n\u003cli\u003eSubsequent returns: If you returned a payment you received, link it to the original receipt record.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\n\u003ca href=\"#fields-to-record-to-prevent-duplicates\" class=\"anchor\" id=\"fields-to-record-to-prevent-duplicates\"\u003e\u003c/a\u003eFields to Record to Prevent Duplicates\u003c/h3\u003e\n\u003cp\u003eEvents can be distinguished using \u003ccode\u003echainId + txHash + logIndex\u003c/code\u003e. A single transaction can contain multiple transfer events. Combining all events into one record based only on txHash can therefore cause omissions.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eField to store\u003c/th\u003e\n\u003cth\u003ePurpose\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field to store\"\u003eChain ID, token contract address\u003c/td\u003e\n\u003ctd data-label=\"Purpose\"\u003eIdentify the network and asset\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field to store\"\u003etxHash, logIndex\u003c/td\u003e\n\u003ctd data-label=\"Purpose\"\u003eDistinguish transfer events\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field to store\"\u003eblockNumber, blockHash\u003c/td\u003e\n\u003ctd data-label=\"Purpose\"\u003eRecheck the containing block\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field to store\"\u003eSender address, recipient address\u003c/td\u003e\n\u003ctd data-label=\"Purpose\"\u003eCheck the direction of fund movement\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field to store\"\u003eRaw amount, decimals, USDC amount\u003c/td\u003e\n\u003ctd data-label=\"Purpose\"\u003eReproduce the unit conversion\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field to store\"\u003eBlock time, verification time, time zone\u003c/td\u003e\n\u003ctd data-label=\"Purpose\"\u003eDistinguish transfer time from verification time\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field to store\"\u003eFinality status\u003c/td\u003e\n\u003ctd data-label=\"Purpose\"\u003eDistinguish pending records from final records\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field to store\"\u003eJob number, invoice, payment details\u003c/td\u003e\n\u003ctd data-label=\"Purpose\"\u003eLink the deposit to its purpose\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field to store\"\u003eRefund, self-transfer, and duplicate classifications\u003c/td\u003e\n\u003ctd data-label=\"Purpose\"\u003ePrevent overstating payments for new work\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eRecheck records if a block reorganization occurs before finality. Removed logs must be excluded from the existing provisional total. Track total work payments separately from the wallet balance. The balance also reflects earlier holdings and subsequent withdrawals.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#5-minute-verification-checklist\" class=\"anchor\" id=\"5-minute-verification-checklist\"\u003e\u003c/a\u003e5-Minute Verification Checklist\u003c/h2\u003e\n\u003cp\u003eThis table lists items to check over about 5 minutes. It does not guarantee that blockchain finality will be reached within that time. Leave any item you cannot verify as pending.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eStep\u003c/th\u003e\n\u003cth\u003eCheck question\u003c/th\u003e\n\u003cth\u003eResult to record\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Step\"\u003e1\u003c/td\u003e\n\u003ctd data-label=\"Check question\"\u003eDo you know the chain and amount in the payment terms?\u003c/td\u003e\n\u003ctd data-label=\"Result to record\"\u003eAgreed network and USDC amount\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Step\"\u003e2\u003c/td\u003e\n\u003ctd data-label=\"Check question\"\u003eDoes the receiving service support that chain?\u003c/td\u003e\n\u003ctd data-label=\"Result to record\"\u003eRecipient address and support status\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Step\"\u003e3\u003c/td\u003e\n\u003ctd data-label=\"Check question\"\u003eDoes the log's contract match the Circle address?\u003c/td\u003e\n\u003ctd data-label=\"Result to record\"\u003eWhether the official contract matches\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Step\"\u003e4\u003c/td\u003e\n\u003ctd data-label=\"Check question\"\u003eDid the transaction succeed and transfer tokens to your address?\u003c/td\u003e\n\u003ctd data-label=\"Result to record\"\u003eStatus and Transfer recipient address\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Step\"\u003e5\u003c/td\u003e\n\u003ctd data-label=\"Check question\"\u003eDid you convert the raw amount correctly?\u003c/td\u003e\n\u003ctd data-label=\"Result to record\"\u003eActual USDC amount\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Step\"\u003e6\u003c/td\u003e\n\u003ctd data-label=\"Check question\"\u003eDid you check the containing block and finality?\u003c/td\u003e\n\u003ctd data-label=\"Result to record\"\u003eBlock hash and finalization status\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Step\"\u003e7\u003c/td\u003e\n\u003ctd data-label=\"Check question\"\u003eCan it be linked to an external payment for that job?\u003c/td\u003e\n\u003ctd data-label=\"Result to record\"\u003eJob number and supporting payment evidence\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Step\"\u003e8\u003c/td\u003e\n\u003ctd data-label=\"Check question\"\u003eDid you separate refunds, self-transfers, and duplicates?\u003c/td\u003e\n\u003ctd data-label=\"Result to record\"\u003eClassification result and event identifier\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eThe first check may not provide enough payment evidence. If so, request the missing chain name or txHash. If the transfer went to another address, explain the specific mismatch.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#frequently-asked-questions\" class=\"anchor\" id=\"frequently-asked-questions\"\u003e\u003c/a\u003eFrequently Asked Questions\u003c/h2\u003e\n\u003ch3\u003e\n\u003ca href=\"#is-a-deposit-complete-once-i-receive-a-txhash\" class=\"anchor\" id=\"is-a-deposit-complete-once-i-receive-a-txhash\"\u003e\u003c/a\u003eIs a deposit complete once I receive a txHash?\u003c/h3\u003e\n\u003cp\u003eA hash alone cannot confirm that a deposit is complete. Even a successful transaction may have a different recipient address. Check the contract, recipient address, amount, and finality together.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#what-if-the-status-is-success-but-i-cannot-see-the-wallet-balance\" class=\"anchor\" id=\"what-if-the-status-is-success-but-i-cannot-see-the-wallet-balance\"\u003e\u003c/a\u003eWhat if the status is Success but I cannot see the wallet balance?\u003c/h3\u003e\n\u003cp\u003eFirst compare the event's recipient address and the official contract. If they match, check the selected network and token display. The receiving service's internal crediting status must also be checked separately.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#can-i-look-for-a-base-deposit-on-ethereum\" class=\"anchor\" id=\"can-i-look-for-a-base-deposit-on-ethereum\"\u003e\u003c/a\u003eCan I look for a Base deposit on Ethereum?\u003c/h3\u003e\n\u003cp\u003eLook up Base transactions in a Base explorer. Records are separate for each chain even if the same address is used. Do not conclude that a Base deposit is missing based only on Ethereum search results.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#if-0-eth-appears-at-the-top-of-the-transaction-does-that-mean-no-deposit-was-made\" class=\"anchor\" id=\"if-0-eth-appears-at-the-top-of-the-transaction-does-that-mean-no-deposit-was-made\"\u003e\u003c/a\u003eIf 0 ETH appears at the top of the transaction, does that mean no deposit was made?\u003c/h3\u003e\n\u003cp\u003eA 0 ETH display is not evidence that no USDC was transferred. The transaction's ETH amount and ERC-20 token amount are separate. Check the USDC amount in the Transfer event.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#is-a-fully-confirmed-external-deposit-new-revenue\" class=\"anchor\" id=\"is-a-fully-confirmed-external-deposit-new-revenue\"\u003e\u003c/a\u003eIs a fully confirmed external deposit new revenue?\u003c/h3\u003e\n\u003cp\u003eAn external deposit alone cannot establish new revenue from work. It could be a refund or a transfer for another purpose. Use invoices and payment details to link the deposit to its purpose.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#can-i-calculate-taxes-based-on-deposit-verification-results\" class=\"anchor\" id=\"can-i-calculate-taxes-based-on-deposit-verification-results\"\u003e\u003c/a\u003eCan I calculate taxes based on deposit verification results?\u003c/h3\u003e\n\u003cp\u003eThis procedure is for checking evidence of on-chain receipt. It does not determine an individual's tax outcome. For Korean tax guidance, see the National Tax Service's \u003ca href=\"https://www.nts.go.kr/nts/cm/cntnts/cntntsView.do?cntntsId=7664\u0026amp;mi=2224\"\u003eOverview of Global Income Tax\u003c/a\u003e.\u003c/p\u003e\n","tags":["Everyday Finance","Stablecoin","Content monetization","Development Tools"],"faqs":[{"question":"What do I need to verify a USDC deposit?","answer":"First, confirm the chain and the amount of USDC you agreed to receive. You also need the receiving address and txHash. Cross-check the official contract's Transfer event and the transaction's finality."},{"question":"Are the USDC contract addresses on Ethereum and Base the same?","answer":"They are different. Check the contract address for each chain in Circle's USDC contract addresses. Do not assume it is the same asset based only on the USDC name or logo in your wallet."},{"question":"What are the chain IDs for Ethereum and Base?","answer":"The chain ID for Ethereum Mainnet is 1. The chain ID for Base Mainnet is 8453. The RPC eth_chainId responses are 0x1 and 0x2105, respectively."},{"question":"Does having a txHash mean the bounty has been paid?","answer":"A txHash is an identifier used to find a transaction. To serve as proof that you were paid, it must be checked against your receiving address. Also verify the official contract, amount, transaction success, and finality."},{"question":"What is the difference between Success and finalized?","answer":"Success means the transaction executed successfully. finalized indicates that the block has reached finality. Check finality separately even for a successful transfer."},{"question":"Why does 100 USDC appear as 100000000 in the raw logs?","answer":"The USDC in question on Ethereum and Base uses 6 decimal places. Dividing the raw amount of 100,000,000 by 1,000,000 gives 100 USDC. Do not divide an amount again if the explorer has already converted it."},{"question":"Should I check the To at the top of the transaction or the to in Transfer?","answer":"Check the token's receiving address in the Transfer event's to field. The To at the top of the transaction may be a token or payment contract. Compare the entire address against the receiving address you verified beforehand."},{"question":"Does 100 dollars in the posting mean the same thing as a deposit of 100 USDC?","answer":"The 100 dollars in the posting is the stated reward amount. You must check the payment agreement for the actual number of tokens to be paid. Receiving 100 USDC does not mean receiving 100 dollars in cash."},{"question":"Is an escrow deposit or Approval proof of receiving payment?","answer":"An escrow deposit shows a transfer to a separate holding address. ERC-20 Approval grants permission to use tokens. Separately verify the actual transfer to your receiving address."},{"question":"How do I prevent duplicate USDC deposit records?","answer":"Record the chain ID, txHash, and logIndex together. Do not count the same event multiple times from different lookup sources. Also check for reuse of deposits already assigned to other tasks."},{"question":"Do refunds or transfers between my own wallets also count as payment for new work?","answer":"Classify refunds and transfers between your own wallets separately from payments for new work. An on-chain transfer alone does not reveal the purpose of the payment. Link it to the original spending or transfer record."},{"question":"Can USDC deposit verification be completed within 5 minutes?","answer":"The 5-minute checklist is a tool that lays out the order of checks. The network may take longer to reach finality, or the service may take longer to show the deposit. Mark any unverified items as pending."}],"sources":[{"url":"https://developers.circle.com/stablecoins/usdc-contract-addresses","title":"Circle Docs: USDC contract addresses","type":"source"},{"url":"https://eips.ethereum.org/EIPS/eip-155","title":"EIP-155: Simple replay attack protection, Ethereum Mainnet chain ID","type":"data_point"},{"url":"https://docs.base.org/base-chain/api-reference/ethereum-json-rpc-api/eth_chainId","title":"Base Documentation: eth_chainId","type":"data_point"},{"url":"https://eips.ethereum.org/EIPS/eip-20","title":"ERC-20: Token Standard, Transfer·Approval·decimals","type":"source"},{"url":"https://info.etherscan.com/what-is-event-logs/","title":"Etherscan Information Center: Event Logs","type":"source"},{"url":"https://info.etherscan.com/explore-contract-address/","title":"Etherscan Information Center: Explore a Contract Address","type":"source"},{"url":"https://ethereum.org/developers/docs/apis/json-rpc/","title":"Ethereum: JSON-RPC API, receipt, log, and finalized queries","type":"source"},{"url":"https://ethereum.github.io/execution-apis/api/methods/eth_getTransactionReceipt/","title":"Ethereum Execution APIs: eth_getTransactionReceipt","type":"source"},{"url":"https://docs.base.org/specifications/transactions/transaction-finality","title":"Base Documentation: Transaction Finality","type":"source"},{"url":"https://docs.base.org/base-chain/api-reference/ethereum-json-rpc-api/eth_getBlockByNumber","title":"Base Documentation: eth_getBlockByNumber","type":"source"},{"url":"https://ethereum.org/developers/docs/networks/","title":"Ethereum: Networks, balances and transaction history by network","type":"source"},{"url":"https://etherscan.io/token/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48?a=0x1aadee97df948a9676cdd16aadc4477ecd06a8c7","title":"Etherscan: USDC Token Contract, displayed to 6 decimal places","type":"data_point"},{"url":"https://www.nts.go.kr/nts/cm/cntnts/cntntsView.do?cntntsId=7664\u0026mi=2224","title":"National Tax Service: Overview of Global Income Tax","type":"source"}],"images":[{"id":2082,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzIwMTQsInB1ciI6ImJsb2JfaWQifX0=--66d015359c342f46f8ea28a40eeea1097d8934ce/ai-46cc85be.webp","is_representative":true,"generation_method":"ai_photo","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"햇살이 드는 집 안 식탁에서 태블릿과 스마트폰 화면을 차분히 살펴보는 중년 남성","caption":"USDC 입금은 해당 체인의 전송 기록에서 수취 주소와 수량을 대조해 확인하세요.","description":null},"en":{"alt":"A middle-aged man carefully reviews tablet and smartphone screens at a sunlit table at home.","caption":"Verify a USDC deposit by matching the recipient address and amount against transfer records on the relevant chain.","description":null},"ja":{"alt":"日差しの入る自宅のテーブルで、タブレットとスマートフォンの画面を落ち着いて確認する中年男性","caption":"USDCの入金は、該当チェーンの送金記録で受取アドレスと数量を照合して確認しましょう。","description":null},"es":{"alt":"Un hombre de mediana edad revisa una tableta y un móvil en una mesa soleada de su casa.","caption":"Verifica el depósito de USDC cotejando la dirección receptora y el importe con el registro de transferencia de la cadena correspondiente.","description":null},"id":{"alt":"Pria paruh baya mencermati layar tablet dan ponsel di meja rumah yang disinari matahari.","caption":"Verifikasi setoran USDC dengan mencocokkan alamat penerima dan jumlah pada catatan transfer di chain yang sesuai.","description":null},"pt":{"alt":"Um homem de meia-idade examina um tablet e um celular à mesa de casa iluminada pelo sol.","caption":"Confirme o depósito de USDC comparando o endereço de destino e o valor com o registro de transferência na rede correspondente.","description":null},"zh-hant":{"alt":"一名中年男子坐在陽光灑落的家中餐桌旁，專注查看平板電腦與手機螢幕。","caption":"確認 USDC 入帳時，請核對相應鏈上的轉帳紀錄、收款地址與數量。","description":null},"de":{"alt":"Ein Mann mittleren Alters prüft Tablet und Smartphone an einem sonnenbeschienenen Tisch zu Hause.","caption":"Bestätigen Sie den USDC-Eingang, indem Sie Empfängeradresse und Betrag mit dem Transfernachweis auf der jeweiligen Blockchain abgleichen.","description":null}}},{"id":2083,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzIwMjEsInB1ciI6ImJsb2JfaWQifX0=--66077c8a3224c10d76b04cac8d68545ca56f659c/ai-d2b7055c.webp","is_representative":false,"generation_method":"ai_semi","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"자주색 카디건을 입은 여성이 장부와 거래 내역을 대조하며 같은 내역의 출력물을 별도 트레이에 넣고 있다.","caption":"USDC 입금을 작업 대금과 연결한 뒤 중복 기록은 별도로 분류하세요.","description":null},"en":{"alt":"A woman in a plum cardigan places a duplicate transaction printout in a tray beside a ledger and another printout.","caption":"Match the USDC deposit to the work payment, then classify duplicate records separately.","description":null},"ja":{"alt":"紫色のカーディガンを着た女性が、帳簿と取引明細を手元に置き、重複した明細を別のトレーに入れている。","caption":"USDCの入金を作業報酬と照合したうえで、重複記録は別に分類しましょう。","description":null},"es":{"alt":"Una mujer con un cárdigan morado coloca un registro duplicado en una bandeja junto a un libro de cuentas.","caption":"Vincula el depósito de USDC con el pago del trabajo y clasifica los registros duplicados por separado.","description":null},"id":{"alt":"Perempuan berkardigan ungu menaruh cetakan transaksi duplikat di baki di samping buku besar dan cetakan lainnya.","caption":"Cocokkan setoran USDC dengan pembayaran pekerjaan, lalu kelompokkan catatan duplikat secara terpisah.","description":null},"pt":{"alt":"Uma mulher de cardigã roxo coloca um registro duplicado em uma bandeja ao lado de um livro contábil.","caption":"Associe o depósito de USDC ao pagamento pelo trabalho e classifique os registros duplicados separadamente.","description":null},"zh-hant":{"alt":"一名穿著紫色針織外套的女子將重複的交易明細放入獨立托盤，旁邊放著帳本與另一份明細。","caption":"將 USDC 入帳與工作報酬核對後，應把重複紀錄另行分類。","description":null},"de":{"alt":"Eine Frau in violetter Strickjacke legt einen doppelten Transaktionsausdruck neben dem Kassenbuch in eine Ablage.","caption":"Ordnen Sie den USDC-Eingang der Arbeitsvergütung zu und erfassen Sie doppelte Einträge separat.","description":null}}}],"published_at":"2026-10-23T22:01:25+09:00","updated_at":"2026-10-23T22:01:25+09:00","license":"cc_by","translation_status":"reviewed","available_locales":["ko","en","ja","es"],"data_locales":["ko","en","ja","es","id","pt","zh-hant","de"],"url":"https://injoys.com/en/articles/usdc-deposit-verification-2026-chain-contract-transfer-bounty"}