
Endaoment
- 1 installs
- 1.2k repo stars
- Updated August 1, 2026
- bankrbot/clawdbot-skill
endaoment is a Claude skill that donates crypto to 501(c)(3) charities onchain via Endaoment smart contracts.
About
Endaoment lets an agent donate crypto to 501(c)(3) nonprofits onchain via Endaoment's smart contracts. It finds a charity by name or EIN and donates USDC on Base, using Bankr's arbitrary-transaction feature to approve USDC and call deployOrgAndDonate. It supports Base, Ethereum and Optimism, and can swap ETH or tokens to USDC automatically.
- Donates crypto to 501(c)(3) nonprofits onchain via Endaoment smart contracts
- Finds charities by name or EIN and donates USDC on Base
- Uses Bankr arbitrary transactions to approve USDC and call deployOrgAndDonate
Endaoment by the numbers
- 1 all-time installs (skills.sh)
- Ranked #426 of 479 Web3 & Blockchain skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
endaoment capabilities & compatibility
Requires a configured Bankr API key and a USDC balance; Bankr covers gas.
- Capabilities
- trading
- Use cases
- trading
- Pricing
- Bring your own API key
What endaoment says it does
Donate to 501(c)(3) nonprofits onchain via Endaoment's smart contracts.
The donate script uses Bankr's arbitrary transaction feature to:
npx skills add https://github.com/bankrbot/clawdbot-skill --skill endaomentAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 1.2k |
| Last updated | August 1, 2026 |
| Repository | bankrbot/clawdbot-skill ↗ |
What it does
Donate USDC to 501(c)(3) charities onchain by EIN or name via Endaoment smart contracts on Base.
Who is it for?
Donating USDC to US 501(c)(3) nonprofits onchain by EIN or name.
Skip if: Donations outside supported chains without different contract addresses.
When should I use this skill?
The user wants to donate crypto to charity, give to a nonprofit or support a 501(c)(3).
What you get
A USDC donation reaches a chosen 501(c)(3) nonprofit through Endaoment's contracts on Base.
By the numbers
- 1.5% fee on org donations
- 5-charity quick-reference EIN table
Files
Endaoment Charity Donations
Donate to 501(c)(3) nonprofits onchain via Endaoment's smart contracts.
Quick Start
Find a Charity
Search by name or EIN:
./scripts/search.sh "27-1661997" # EIN lookup (GiveDirectly)
./scripts/search.sh "Red Cross" # Name searchDonate USDC (Base)
./scripts/donate.sh <ein> <amount_usdc>Example: Donate $5 USDC to GiveDirectly:
./scripts/donate.sh 27-1661997 5How It Works
The donate script uses Bankr's arbitrary transaction feature to: 1. Approve USDC to the Endaoment OrgFundFactory 2. Call deployOrgAndDonate(orgId, amount) which:
- Deploys the charity's entity contract on Base (if not already deployed)
- Donates the specified USDC amount
Popular Charities
| Charity | EIN |
|---|---|
| GiveDirectly | 27-1661997 |
| North Shore Animal League America | 11-1666852 |
| American Red Cross | 53-0196605 |
| Doctors Without Borders | 13-3433452 |
| ASPCA | 13-1623829 |
See references/popular-charities.md for more.
Contract Addresses (Base)
| Contract | Address |
|---|---|
| Registry | 0x237b53bcfbd3a114b549dfec96a9856808f45c94 |
| OrgFundFactory | 0x10fd9348136dcea154f752fe0b6db45fc298a589 |
| USDC | 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 |
Fees
- Org donations: 1.5% fee (e.g., $100 → $1.50 fee, $98.50 to charity)
- Fund donations: 0.05-0.50% tiered
Requirements
- Bankr skill with API key configured
- USDC balance on Base
- ETH on Base for gas (Bankr covers this)
Technical Details
Function Selectors
approve(address,uint256):0x095ea7b3deployOrgAndDonate(bytes32,uint256):0xdb9e30cc
OrgId Encoding
The EIN (e.g., "11-1666852") is encoded as bytes32:
"11-1666852" → 0x31312d3136363638353200000000000000000000000000000000000000000000Notes
- All donations are tax-deductible (US 501(c)(3) orgs)
- Donations are permissionless — anyone can donate
- Uses Bankr arbitrary transactions for contract interaction
- Works on Base; other chains require different addresses
Popular Charities on Endaoment
Quick reference for well-known 501(c)(3) organizations.
Effective Giving
| Charity | EIN | Focus |
|---|---|---|
| GiveDirectly | 27-1661997 | Direct cash transfers to poor |
| GiveWell | 20-8625442 | Charity evaluator |
| Against Malaria Foundation | 20-3069841 | Malaria prevention |
Humanitarian
| Charity | EIN | Focus |
|---|---|---|
| Doctors Without Borders | 13-3433452 | Medical aid |
| UNICEF USA | 13-1760110 | Children's welfare |
| International Rescue Committee | 13-5660870 | Refugees |
| Save the Children | 06-0726487 | Children's welfare |
| Direct Relief | 95-1831116 | Medical supplies |
Environment
| Charity | EIN | Focus |
|---|---|---|
| The Nature Conservancy | 53-0242652 | Land conservation |
| Environmental Defense Fund | 11-6107128 | Environmental advocacy |
| World Wildlife Fund | 52-1693387 | Wildlife conservation |
Education & Research
| Charity | EIN | Focus |
|---|---|---|
| Khan Academy | 26-1544963 | Free education |
| Wikipedia Foundation | 20-0049703 | Free knowledge |
Animal Welfare
| Charity | EIN | Focus |
|---|---|---|
| ASPCA | 13-1623829 | Animal welfare |
| Humane Society | 53-0225390 | Animal protection |
Usage
# Lookup by EIN
./scripts/search.sh "27-1661997"
# Donate $50 to GiveDirectly
./scripts/donate.sh 27-1661997 50 base#!/bin/bash
# Donate USDC to an Endaoment charity on Base via Bankr arbitrary transactions
# Usage: ./donate.sh <ein> <amount_usdc>
#
# Example: ./donate.sh 11-1666852 1 (donates 1 USDC to North Shore Animal League)
set -euo pipefail
# Require Bankr CLI
if ! command -v bankr >/dev/null 2>&1; then
echo "Bankr CLI not found. Install with: bun install -g @bankr/cli" >&2
exit 1
fi
EIN="${1:-}"
AMOUNT="${2:-}"
if [[ -z "$EIN" ]] || [[ -z "$AMOUNT" ]]; then
echo "Usage: $0 <ein> <amount_usdc>"
echo ""
echo "Examples:"
echo " $0 11-1666852 1 # North Shore Animal League America"
echo " $0 27-1661997 5 # GiveDirectly"
echo " $0 53-0196605 10 # American Red Cross"
exit 1
fi
# Base chain addresses
FACTORY="0x10fd9348136dcea154f752fe0b6db45fc298a589"
USDC="0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
CHAIN_ID=8453
RPC_URL="https://mainnet.base.org"
# Convert amount to USDC decimals (6)
AMOUNT_WEI=$(echo "$AMOUNT * 1000000" | bc | cut -d'.' -f1)
AMOUNT_HEX=$(printf '%064x' "$AMOUNT_WEI")
# Encode EIN as bytes32 (remove hyphens/spaces, digits only)
# IMPORTANT: Endaoment uses EIN WITHOUT hyphens (e.g., "111666852" not "11-1666852")
EIN_CLEAN=$(echo "$EIN" | tr -d ' -')
EIN_HEX=$(echo -n "$EIN_CLEAN" | xxd -p)
ORG_ID="${EIN_HEX}$(printf '%0*d' $((64 - ${#EIN_HEX})) 0)"
# Compute the deterministic contract address using computeOrgAddress(bytes32)
echo "🔍 Looking up charity contract address..."
COMPUTE_RESULT=$(curl -s -X POST "$RPC_URL" \
-H "Content-Type: application/json" \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"$FACTORY\",\"data\":\"0x9fb8578d${ORG_ID}\"},\"latest\"],\"id\":1}" | jq -r '.result')
if [[ -z "$COMPUTE_RESULT" ]] || [[ "$COMPUTE_RESULT" == "null" ]]; then
echo "❌ Failed to compute contract address for EIN: $EIN"
exit 1
fi
# Extract address from padded result
ENTITY_ADDRESS="0x$(echo "$COMPUTE_RESULT" | tail -c 41 | head -c 40)"
echo " Entity address: $ENTITY_ADDRESS"
# Check if contract is already deployed (eth_getCode)
CODE=$(curl -s -X POST "$RPC_URL" \
-H "Content-Type: application/json" \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_getCode\",\"params\":[\"$ENTITY_ADDRESS\",\"latest\"],\"id\":1}" | jq -r '.result')
# Function selectors
APPROVE_SELECTOR="095ea7b3" # approve(address,uint256)
DONATE_SELECTOR="f14faf6f" # donate(uint256)
DEPLOY_SELECTOR="db9e30cc" # deployOrgAndDonate(bytes32,uint256)
echo ""
echo "🎁 Endaoment Donation on Base"
echo " EIN: $EIN"
echo " Amount: $AMOUNT USDC"
echo ""
if [[ "$CODE" != "0x" ]] && [[ -n "$CODE" ]]; then
# Contract already deployed - donate directly
echo "✅ Contract already deployed, donating directly..."
# Transaction 1: Approve USDC to entity
APPROVE_DATA="0x${APPROVE_SELECTOR}000000000000000000000000${ENTITY_ADDRESS:2}${AMOUNT_HEX}"
echo "📝 Step 1: Approving USDC..."
APPROVE_TX="{\"to\": \"$USDC\", \"data\": \"$APPROVE_DATA\", \"value\": \"0\", \"chainId\": $CHAIN_ID}"
APPROVE_RESULT=$(bankr prompt "Submit this transaction: $APPROVE_TX" 2>&1)
if echo "$APPROVE_RESULT" | grep -q "basescan.org/tx"; then
APPROVE_HASH=$(echo "$APPROVE_RESULT" | grep -o 'https://basescan.org/tx/[^ "]*' | head -1)
echo " ✅ Approved: $APPROVE_HASH"
else
echo " ❌ Approve failed: $APPROVE_RESULT"
exit 1
fi
# Transaction 2: Donate directly to entity
DONATE_DATA="0x${DONATE_SELECTOR}${AMOUNT_HEX}"
echo "📝 Step 2: Donating..."
DONATE_TX="{\"to\": \"$ENTITY_ADDRESS\", \"data\": \"$DONATE_DATA\", \"value\": \"0\", \"chainId\": $CHAIN_ID}"
DONATE_RESULT=$(bankr prompt "Submit this transaction: $DONATE_TX" 2>&1)
if echo "$DONATE_RESULT" | grep -q "basescan.org/tx"; then
DONATE_HASH=$(echo "$DONATE_RESULT" | grep -o 'https://basescan.org/tx/[^ "]*' | head -1)
echo " ✅ Donated: $DONATE_HASH"
else
echo " ❌ Donation failed: $DONATE_RESULT"
exit 1
fi
else
# Contract not deployed - use factory to deploy and donate
echo "📦 Contract not deployed on Base, deploying via factory..."
# Transaction 1: Approve USDC to factory
APPROVE_DATA="0x${APPROVE_SELECTOR}000000000000000000000000${FACTORY:2}${AMOUNT_HEX}"
echo "📝 Step 1: Approving USDC to factory..."
APPROVE_TX="{\"to\": \"$USDC\", \"data\": \"$APPROVE_DATA\", \"value\": \"0\", \"chainId\": $CHAIN_ID}"
APPROVE_RESULT=$(bankr prompt "Submit this transaction: $APPROVE_TX" 2>&1)
if echo "$APPROVE_RESULT" | grep -q "basescan.org/tx"; then
APPROVE_HASH=$(echo "$APPROVE_RESULT" | grep -o 'https://basescan.org/tx/[^ "]*' | head -1)
echo " ✅ Approved: $APPROVE_HASH"
else
echo " ❌ Approve failed: $APPROVE_RESULT"
exit 1
fi
# Transaction 2: Deploy & Donate via factory
DEPLOY_DATA="0x${DEPLOY_SELECTOR}${ORG_ID}${AMOUNT_HEX}"
echo "📝 Step 2: Deploying & donating..."
DEPLOY_TX="{\"to\": \"$FACTORY\", \"data\": \"$DEPLOY_DATA\", \"value\": \"0\", \"chainId\": $CHAIN_ID}"
DEPLOY_RESULT=$(bankr prompt "Submit this transaction: $DEPLOY_TX" 2>&1)
if echo "$DEPLOY_RESULT" | grep -q "basescan.org/tx"; then
DEPLOY_HASH=$(echo "$DEPLOY_RESULT" | grep -o 'https://basescan.org/tx/[^ "]*' | head -1)
echo " ✅ Deployed & Donated: $DEPLOY_HASH"
else
echo " ❌ Deploy & Donate failed: $DEPLOY_RESULT"
exit 1
fi
fi
echo ""
echo "🎉 Success! Donated $AMOUNT USDC to charity (EIN: $EIN)"
echo " Net to charity: ~\$$(echo "$AMOUNT * 0.985" | bc) (after 1.5% Endaoment fee)"
#!/bin/bash
# Search for Endaoment entities (charities) by name or EIN
# Usage: ./search.sh "charity name" or ./search.sh "12-3456789"
set -euo pipefail
QUERY="${1:-}"
CHAIN="${2:-base}"
if [[ -z "$QUERY" ]]; then
echo "Usage: $0 <charity_name_or_ein> [chain]"
echo ""
echo "Examples:"
echo " $0 \"27-1661997\" # EIN lookup (GiveDirectly)"
echo " $0 \"Red Cross\" base # Name search"
exit 1
fi
# Get chain index for deployments array
case "$CHAIN" in
ethereum|mainnet) CHAIN_IDX=0 ;;
optimism) CHAIN_IDX=1 ;;
base) CHAIN_IDX=2 ;;
*) CHAIN_IDX=2 ;;
esac
# Check if query looks like an EIN (XX-XXXXXXX or XXXXXXXXX)
CLEAN_EIN=$(echo "$QUERY" | tr -d '-')
if [[ "$CLEAN_EIN" =~ ^[0-9]{9}$ ]]; then
echo "🔍 Looking up EIN: $QUERY"
echo "---"
RESPONSE=$(curl -s "https://api.endaoment.org/v1/orgs/ein/${CLEAN_EIN}" \
-H "Accept: application/json")
if [[ -z "$RESPONSE" ]] || [[ "$RESPONSE" == *"error"* ]] || [[ "$RESPONSE" == *"Not Found"* ]]; then
echo "❌ No charity found with EIN: $QUERY"
exit 1
fi
echo "$RESPONSE" | jq -r --argjson idx "$CHAIN_IDX" '
"📛 Name: \(.name)
🆔 EIN: \(.ein)
📍 Contract: \(.deployments[$idx].contractAddress // "N/A")
✅ Deployed: \(.deployments[$idx].isDeployed // false)
💰 Lifetime Donations: $\(.lifetimeContributionsUsdc // "0")
🌐 Website: \(.website // "N/A")
📝 Description: \(.description // "N/A" | .[0:200])..."
'
exit 0
fi
# Name search
ENCODED=$(echo "$QUERY" | jq -sRr @uri)
echo "🔍 Searching for: $QUERY (on $CHAIN)"
echo "---"
RESPONSE=$(curl -s "https://api.endaoment.org/v1/orgs?search=${ENCODED}&limit=5" \
-H "Accept: application/json")
if [[ -z "$RESPONSE" ]] || [[ "$RESPONSE" == "[]" ]]; then
echo "No results found for: $QUERY"
echo ""
echo "💡 Tip: Try searching by EIN for exact match (e.g., 27-1661997)"
exit 0
fi
echo "$RESPONSE" | jq -r --argjson idx "$CHAIN_IDX" '
.[] |
"📛 Name: \(.name)
🆔 EIN: \(.ein)
📍 Contract: \(.deployments[$idx].contractAddress // "N/A")
✅ Deployed: \(.deployments[$idx].isDeployed // false)
---"
' 2>/dev/null || echo "Error parsing response"
Related skills
FAQ
How do donations work?
The donate script uses Bankr to approve USDC and call deployOrgAndDonate, which deploys the charity entity if needed and donates the USDC.
Are donations tax-deductible?
Yes, all donations are tax-deductible for US 501(c)(3) organizations per the docs.