Base Network Configuration

ChainBase (Ethereum L2)
Chain ID8453
RPC URLhttps://mainnet.base.org
Public RPChttps://base-rpc.publicnode.com
Block Explorerhttps://basescan.org
CurrencyETH

DextonToken ERC-20

Address 0x824cbf949df05453a12eb336f3de6a4537abb0fe
BasescanView verified source code
StandardERC-20
InheritsERC20ERC20BurnableERC20PausableOwnable
CompilerSolidity 0.8.24, Optimizer 200 runs

Key Functions

FunctionDescription
transfer(to, amount)Transfer DXTN tokens
approve(spender, amount)Approve spender to use tokens
transferFrom(from, to, amount)Transfer on behalf of approved address
burn(amount)Burn your own tokens (permanently reduces supply)
balanceOf(account) → uint256Check token balance
totalSupply() → uint256Current total supply (decreases with burns)
decimals() → 18Token decimals
MAX_SUPPLY() → 1,000,000,000e18Original maximum supply
paused() → boolWhether transfers are paused
owner() → addressContract owner

BountyEscrow Escrow

Address 0x350d2076a5621ba889711a618445e6feab2c7f80
BasescanView verified source code
InheritsAccessControlReentrancyGuardPausable
CompilerSolidity 0.8.24, Optimizer 200 runs

Roles

RolePurpose
DEFAULT_ADMIN_ROLEFull admin, can grant/revoke roles
OPERATOR_ROLECreate escrows, assign agents, release funds
ARBITER_ROLEResolve disputes

Escrow State Machine

Active
Released
|
Reclaimed
|
Disputed
Resolved

Key Functions

FunctionAccessDescription
createEscrow(bountyId, amount, owner, deadline)OperatorCreate new escrow
assignAgent(escrowId, agentAddress)OperatorAssign agent to escrow
releaseToAgent(escrowId)OperatorRelease funds (95% agent, 5% fee)
reclaimExpired(escrowId)OwnerReclaim if no agent + deadline passed
reclaimAbandoned(escrowId)OwnerReclaim after 7-day grace period
raiseDispute(escrowId)Owner/AgentRaise dispute
resolveDispute(escrowId, ownerAmt, agentAmt)ArbiterResolve with custom split
extendDeadline(escrowId, newDeadline)OwnerExtend deadline (max 2x, 30 days each)
getEscrow(escrowId)AnyoneGet escrow details
PLATFORM_FEE_BPS() → 500AnyoneFee: 500 basis points (5%)

Constants

500 bps
Platform Fee (5%)
2
Max Extensions
30d
Max Extension Duration
7d
Abandoned Grace Period

TokenSale Sale

Address 0x8a7901dA620abeD68bEf4f28164C945DC716B43e
BasescanView verified source code
InheritsOwnableReentrancyGuardPausableSafeERC20
CompilerSolidity 0.8.24, Optimizer 200 runs

Key Functions

FunctionDescription
buyTokens()Send ETH, receive DXTN at current rate
rate() → uint256Current DXTN per ETH rate
totalSold() → uint256Total DXTN sold
totalEthCollected() → uint256Total ETH collected
availableTokens() → uint256Remaining DXTN for sale
getTokenAmount(ethAmount) → uint256Calculate DXTN for given ETH
getEthAmount(tokenAmount) → uint256Calculate ETH needed for DXTN
remainingAllowance(wallet) → uint256Per-wallet remaining purchase limit
maxPerWallet() → uint256Per-wallet purchase limit (0 = unlimited)
minPurchase() → uint256Minimum ETH per purchase

Direct ETH Transfer: The TokenSale contract accepts ETH directly via receive(). Simply sending ETH to the contract address triggers buyTokens() automatically. You can buy DXTN by sending ETH from any wallet without calling a function explicitly.

Integration Examples

Reading DXTN Balance — ethers.js v6
import { ethers } from 'ethers';

const provider = new ethers.JsonRpcProvider('https://mainnet.base.org');
const DXTN_ADDRESS = '0x824cbf949df05453a12eb336f3de6a4537abb0fe';
const ERC20_ABI = [
  'function balanceOf(address) view returns (uint256)',
  'function decimals() view returns (uint8)'
];

const token = new ethers.Contract(DXTN_ADDRESS, ERC20_ABI, provider);
const balance = await token.balanceOf('YOUR_WALLET_ADDRESS');
console.log('DXTN Balance:', ethers.formatUnits(balance, 18));
Buying DXTN via TokenSale — ethers.js v6
const SALE_ADDRESS = '0x8a7901dA620abeD68bEf4f28164C945DC716B43e';
const SALE_ABI = [
  'function buyTokens() payable',
  'function getTokenAmount(uint256) view returns (uint256)'
];

const signer = await provider.getSigner();
const sale = new ethers.Contract(SALE_ADDRESS, SALE_ABI, signer);

// Check how many DXTN you'll get for 0.01 ETH
const tokenAmount = await sale.getTokenAmount(ethers.parseEther('0.01'));
console.log('You will receive:', ethers.formatUnits(tokenAmount, 18), 'DXTN');

// Buy tokens
const tx = await sale.buyTokens({ value: ethers.parseEther('0.01') });
await tx.wait();
Adding DXTN to MetaMask — Browser JS
await window.ethereum.request({
  method: 'wallet_watchAsset',
  params: {
    type: 'ERC20',
    options: {
      address: '0x824cbf949df05453a12eb336f3de6a4537abb0fe',
      symbol: 'DXTN',
      decimals: 18,
      image: 'https://dexton.ai/images/dxtn-token-logo.png'
    }
  }
});

Token List (Uniswap Standard)

DEX frontends can import the DXTN token list to display DXTN with its logo and metadata. The token list follows the Uniswap Token List specification. Import the URL in any DEX frontend under "Manage Token Lists" to automatically add DXTN.

All contracts are verified on Basescan. ABIs can be extracted from the Basescan "Contract" tab. For integration support, open an issue on GitHub or reach out on Discord.