Galxe Integration

This document provides technical details on how Noderr integrates with Galxe for The Noderr Odyssey campaign.

Overview

Galxe is a Web3 credential and campaign platform that enables projects to run quests, verify on-chain actions, and distribute rewards. Noderr uses Galxe's infrastructure for:

  • Task Verification - Verifying user actions both on-chain and off-chain
  • Credential Issuance - Issuing OATs (On-chain Achievement Tokens)
  • Leaderboard Management - Tracking and displaying participant rankings
  • Airdrop Distribution - Using Galxe's Earndrop feature for token distribution

Credential Types

Contract Query Credentials

These credentials verify on-chain actions by querying Noderr smart contracts.

CredentialContractFunction
Has DepositedVaultManagerhasDeposited(address, uint256)
Owns Genesis NFTGalxeIntegrationownsAnyGenesisNFT(address)
Has Submitted StrategyStrategyRegistryhasSubmittedStrategy(address)
Has VotedGovernanceManagerhasVotedOnAnyProposal(address)
Is Running NodeNodeRegistryisRegistered(address)
Trust Score CheckTrustFingerprintgetScore(address)

API Credentials

These credentials verify off-chain actions via Noderr's API.

CredentialEndpointDescription
Discord Joined/api/galxe/verify/discordVerifies Discord membership
Twitter Followed/api/galxe/verify/twitterVerifies Twitter follow
Tutorial Completed/api/galxe/verify/tutorialVerifies onboarding completion
Strategy Draft/api/galxe/verify/strategy-draftVerifies draft strategy submission
Referral Count/api/galxe/verify/referralsVerifies referral milestones

Smart Contract Functions

GalxeIntegration.sol

The GalxeIntegration contract aggregates verification functions across all Noderr contracts:

// Chapter 1: Genesis
function hasUsedFaucetCredential(address user) external view returns (bool);
function ownsAnyGenesisNFT(address user) external view returns (bool);
function ownsGenesisNFTTier(address user, uint8 tier) external view returns (bool);
// Chapter 2: Vaults
function hasDeposited(address user) external view returns (bool);
function hasDepositedMinAmount(address user, uint256 minAmount) external view returns (bool);
// Chapter 3: Strategists
function hasSubmittedAnyStrategy(address user) external view returns (bool);
function hasLiveStrategy(address user) external view returns (bool);
// Chapter 4: Governors
function hasVotedOnAnyProposal(address user) external view returns (bool);
function isGuardian(address user) external view returns (bool);
function isOracle(address user) external view returns (bool);
// Chapter 5: Nexus
function isRunningNode(address user) external view returns (bool);
function hasNodeOfMinTier(address user, uint8 minTier) external view returns (bool);
// Comprehensive
function getComprehensiveStats(address user) external view returns (
bool hasUsedFaucet,
uint8 highestNFTTier,
bool hasDeposited,
uint256 depositAmount,
bool hasStrategy,
bool hasLiveStrategy,
bool hasVoted,
bool isNodeOperator,
uint8 nodeTier,
uint256 trustScore
);

Contract Addresses (Testnet)

ContractAddress
GalxeIntegration0x... (TBD after deployment)
VaultManager0x...
StrategyRegistry0x...
GovernanceManager0x...
NodeRegistry0x...
TrustFingerprint0x...

API Endpoints

Base URL

https://api.noderr.xyz/galxe

Authentication

All API endpoints require a valid Galxe signature for verification.

Endpoints

Verify Discord Membership

GET /verify/discord?address=0x...

Response:

{
"is_eligible": true,
"discord_id": "123456789",
"discord_username": "user#1234"
}

Verify Twitter Follow

GET /verify/twitter?address=0x...

Response:

{
"is_eligible": true,
"twitter_id": "123456789",
"twitter_username": "username"
}

Verify Tutorial Completion

GET /verify/tutorial?address=0x...

Response:

{
"is_eligible": true,
"completed_at": "2026-01-15T12:00:00Z"
}

Verify Referral Count

GET /verify/referrals?address=0x...&min_count=3

Response:

{
"is_eligible": true,
"referral_count": 5
}

Bulk Verification

POST /verify/bulk
Content-Type: application/json
{
"addresses": ["0x...", "0x...", "0x..."],
"credential_type": "has_deposited"
}

Response:

{
"results": {
"0x...": true,
"0x...": false,
"0x...": true
}
}

Setting Up Galxe Credentials

Contract Query Credential Setup

  1. Go to Galxe Dashboard → Credentials → Create Credential
  2. Select "Contract Query" type
  3. Configure:
    • Chain: Select testnet chain
    • Contract Address: Enter GalxeIntegration address
    • Function: Select the verification function
    • Parameters: Configure address parameter
    • Expected Result: Set to true or specific value

API Credential Setup

  1. Go to Galxe Dashboard → Credentials → Create Credential
  2. Select "API" type
  3. Configure:
    • Endpoint URL: Enter Noderr API endpoint
    • Method: GET
    • Headers: Add any required headers
    • Response Path: $.is_eligible
    • Expected Value: true

Sybil Prevention

Galxe credentials include built-in sybil prevention:

  • Galxe Web3 Score - Minimum score of 20 required
  • Twitter Account Age - Minimum 30 days
  • Twitter Followers - Minimum 10 followers
  • Unique Device Fingerprint - One account per device

Additional Noderr-specific checks:

  • TrustFingerprint Score - Minimum 30% for advanced tasks
  • Wallet Age - First transaction at least 7 days ago
  • Transaction History - Minimum 5 transactions

Testing

Testnet Verification

Before mainnet launch, test all credentials on testnet:

  1. Deploy contracts to testnet
  2. Configure Galxe credentials with testnet addresses
  3. Complete all tasks with test wallets
  4. Verify credentials trigger correctly
  5. Test bulk verification endpoints

API Testing

# Test Discord verification
curl "https://api.noderr.xyz/galxe/verify/discord?address=0x..."# Test bulk verification
curl -X POST "https://api.noderr.xyz/galxe/verify/bulk" \
-H "Content-Type: application/json" \
-d '{"addresses": ["0x..."], "credential_type": "has_deposited"}'

Troubleshooting

Credential Not Verifying

  1. Check contract address is correct
  2. Verify function signature matches
  3. Ensure user has completed the action
  4. Check chain ID is correct

API Errors

  1. Verify endpoint URL is accessible
  2. Check authentication headers
  3. Review response format matches expected schema
  4. Check rate limits

Support

For Galxe integration issues:

results matching ""

    No results matching ""