API Keys
Manage your API keys for programmatic access to DogScan services.
Please to manage your API keys.
API Documentation
Request
curl -X GET "https://api.dog.xyz/contracts/api_token_audits/1/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" -H "X-API-Key: YOUR_API_KEY" -H "Content-Type:application-json"Response
// Analysis in progress
{
"status": 1,
"findings": null,
"message": "Analysis in progress"
}
// Analysis completed
{
"status": 2,
"findings": {
"risk_assessment": {
"risk_level": "medium",
"risk_summary": "The contract is an implementation of Wrapped Ether (WETH). The primary risk identified is in the `withdraw` functions, which use `address.transfer()` to send Ether. This method has a fixed gas stipend of 2300, which may be insufficient for smart contract recipients, potentially causing withdrawals to fail and locking funds for those contracts. The contract is otherwise decentralized, with no owner or special administrative privileges, and does not contain malicious logic typical of scam tokens.",
"recommendations": [
"It is recommended to use `.call.value()` instead of `.transfer()` for sending Ether to allow for gas forwarding and prevent failed transactions to smart contract wallets. A re-entrancy guard should also be implemented if `.call.value()` is used."
]
},
"detection_results": {
"scam_token": {
"address_restrictions": {
"detected": false,
"risk_level": "none",
"description": "No address restrictions that would prevent selling were found.",
"code_evidence": ""
},
"amount_restrictions": {
"detected": false,
"risk_level": "none",
"description": "No amount restrictions that would prevent selling were found.",
"code_evidence": ""
},
"arbitrary_transfer_backdoor": {
"detected": false,
"risk_level": "none",
"description": "No backdoor functions for arbitrary token transfers were found.",
"code_evidence": ""
},
"unlimited_approval_backdoor": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
},
"hidden_privileged_address": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
},
"assembly_injection": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
},
"standard_library_tampering": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
},
"event_state_inconsistency": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
}
},
"non_standard_token": {
"inherits_standard_library": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
},
"transfer_logic_compliance": {
"detected": true,
"risk_level": "medium",
"description": "The `withdraw` function uses `address.transfer()` to send Ether. This method forwards a fixed amount of 2300 gas, which is not sufficient if the recipient is a smart contract with a fallback function that requires more gas. This can cause the withdrawal to fail and effectively lock the Ether for contract-based recipients.",
"code_evidence": "function withdraw(uint256 wad) public {
require(balanceOf(msg.sender) >= wad);
_burn(msg.sender, wad);
msg.sender.transfer(wad);
emit Withdrawal(msg.sender, wad);
}
function withdraw(uint256 wad, address user) public {
require(balanceOf(msg.sender) >= wad);
_burn(msg.sender, wad);
address(uint160(user)).transfer(wad);
emit Withdrawal(user, wad);
}"
},
"event_compliance": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
}
},
"centralized_permission": {
"supply_control": {
"detected": false,
"risk_level": "none",
"description": "The total supply is not controlled by any single entity; it is determined by user deposits and withdrawals.",
"code_evidence": ""
},
"tx_control": {
"detected": false,
"risk_level": "none",
"description": "There are no transaction controls such as blacklists, whitelists, or transfer fees.",
"code_evidence": ""
},
"addr_control": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
},
"upgrade_control": {
"detected": false,
"risk_level": "none",
"description": "The contract is not upgradeable.",
"code_evidence": ""
},
"ownership_status": {
"detected": false,
"risk_level": "none",
"description": "The contract does not have an owner.",
"code_evidence": ""
},
"admin_type": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
},
"privilege_concentration": {
"detected": false,
"risk_level": "none",
"description": "",
"code_evidence": ""
}
}
}
},
"message": "Analysis completed"
}
// Contract is not verified
{
"status": 3,
"findings": null,
"message": "Contract is not verified"
}
Code
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.dog.xyz"
# ETH Mainnet WETH
TOKEN = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
# We support ETH Mainnet(1), BSC Mainnet(56), Base Mainnet(8453)
chainId = 1
def query_token(token_address):
url = f"{BASE_URL}/contracts/api_token_audits/{chainId}/{token_address}"
headers ={"X-API-Key": API_KEY}
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json( )
token_info = query_token(TOKEN)
print(token_info)