
Endaoment
- 17 installs
- 1.2k repo stars
- Updated August 1, 2026
- bankrbot/moltbot-skills
Endaoment is a Claude skill that donates USDC to 501(c)(3) nonprofits onchain via Endaoment's smart contracts on Base.
About
Endaoment donates crypto to 501(c)(3) nonprofits onchain via Endaoment's smart contracts on Base. A developer or agent uses it to search charities by name or EIN and send USDC donations, with automatic charity-entity deployment. It relies on the Bankr skill for transaction signing and applies a 1.5% fee on org donations.
- Donates USDC to 501(c)(3) charities onchain via Endaoment on Base
- Search charities by name or EIN, then donate in one call
- Uses Bankr arbitrary transactions to approve USDC and call deployOrgAndDonate
Endaoment by the numbers
- 17 all-time installs (skills.sh)
- Ranked #270 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 Bankr API key plus a USDC balance and ETH for gas on Base; 1.5% donation fee applies.
- Capabilities
- onchain donation · usdc transfer · charity search
- Pricing
- Bring your own API key
What endaoment says it does
Donate to 501(c)(3) nonprofits onchain via Endaoment's smart contracts.
**Org donations**: 1.5% fee (e.g., $100 → $1.50 fee, $98.50 to charity)
npx skills add https://github.com/bankrbot/moltbot-skills --skill endaomentAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 17 |
|---|---|
| repo stars | ★ 1.2k |
| Last updated | August 1, 2026 |
| Repository | bankrbot/moltbot-skills ↗ |
What it does
Donate crypto (USDC on Base) to 501(c)(3) charities onchain via Endaoment smart contracts.
Who is it for?
Agents or apps that need to send tax-deductible USDC donations to US charities onchain on Base.
Skip if: Donating on chains other than Base without different contract addresses, or without a configured Bankr API key.
When should I use this skill?
The user wants to donate crypto to charity, give to a nonprofit, or contribute to a 501(c)(3) onchain.
What you get
A completed onchain USDC donation to a chosen 501(c)(3) charity on Base.
- Onchain USDC donation to a 501(c)(3) charity
By the numbers
- 1.5% fee on org donations
- 5 popular charities listed with EINs
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 agent "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 agent "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 agent "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 agent "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
Which chain does this skill donate on?
It works on Base; other chains require different contract addresses.
What fee does Endaoment charge?
Org donations carry a 1.5% fee (e.g., $100 gives $98.50 to the charity), and fund donations are tiered 0.05-0.50%.