Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5,251 changes: 2,970 additions & 2,281 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@
"dependencies": {
"@11ty/eleventy-fetch": "^4.0.1",
"@apollo/client": "^3.14.0",
"@aptos-labs/ts-sdk": "^4.0.0",
"@aptos-labs/wallet-adapter-react": "^7.0.5",
"@astro-community/astro-embed-youtube": "^0.5.7",
"@astrojs/mdx": "^4.3.6",
"@astrojs/partytown": "^2.1.4",
Expand Down
4 changes: 4 additions & 0 deletions src/config/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1273,6 +1273,10 @@ export const SIDEBAR: Partial<Record<Sections, SectionEntry[]>> = {
title: "Solana",
url: "ccip/getting-started/svm",
},
{
title: "Aptos",
url: "ccip/getting-started/aptos",
},
],
},
{
Expand Down
26 changes: 26 additions & 0 deletions src/content/ccip/getting-started/aptos.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
section: ccip
date: Last Modified
title: "Getting Started with Chainlink CCIP on Aptos"
metadata:
description: "Get started with Chainlink CCIP on Aptos: essential guides and resources to integrate cross‑chain messaging and token transfers using the Move language."
excerpt: "Chainlink CCIP, Cross-chain interoperability, Getting started, Aptos, Move VM, Blockchain integration, Cross-chain dApps, Token bridges, Cross-chain messaging, Aptos FA, Fungible Assets"
datePublished: "2025-09-15"
lastModified: "2025-09-15"
whatsnext: { "Aptos Tutorials": "/ccip/tutorials/aptos", "CCIP Directory": "/ccip/directory" }
---

## Aptos Support in CCIP

Chainlink CCIP supports Aptos, enabling cross-chain interoperability between the Aptos blockchain and other blockchain families, including EVM chains.

## What You Can Build with CCIP on Aptos

- **Cross-Chain Token Transfers**: Transfer tokens from/to Aptos.
- **Cross-Chain Data Messaging**: Send arbitrary data between Aptos modules and smart contracts on other chains.
- **Programmable Token Transfers**: Combine token transfers with messaging to trigger specific actions on destination chains.
- **Cross-Chain Token (CCT) Standard**: Enable your Fungible Asset tokens in CCIP to be transferred to/from Aptos.

## Getting Started with Aptos CCIP

Aptos tutorials can be found [here](/ccip/tutorials/aptos).
26 changes: 25 additions & 1 deletion src/content/ccip/test-tokens.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ metadata:
import { ClickToZoom, Aside } from "@components"
import { MintTokenButton } from "@features/ccip/components/MintTokenButton"

import { SVMTestTokensClient } from "@features/ccip/components/faucet"
import { SVMTestTokensClient, AptosTestTokensClient } from "@features/ccip/components/faucet"
import CcipCommon from "@features/ccip/CcipCommon.astro"

CCIP provides test tokens that you can mint on testnets for development and testing.
Expand Down Expand Up @@ -44,6 +44,30 @@ The faucet requires wallet signature verification. When you request tokens, your
- Message signing is free (no SOL required) and grants no spending permissions.
- After signature verification, the server executes the token mint transaction.

### Aptos Testnet

Use the dedicated faucet interface for CCIP-BnM tokens:

<AptosTestTokensClient client:only="react" />

#### Amount

- The faucet mints **1 CCIP‑BnM** per request.

#### Transaction requirement

The Aptos faucet call is an **on-chain entry-function transaction** initiated from your wallet (not a server-side mint).

- Your wallet will prompt you to sign and submit a transaction that calls the faucet’s `drip` entry function on **Aptos Testnet**.

- Faucet module address: [`0xf92c11250dd30e7d11090326b6057c3ed5555fc1a2d29765ea0307bbebd4e77e`](https://explorer.aptoslabs.com/object/0xf92c11250dd30e7d11090326b6057c3ed5555fc1a2d29765ea0307bbebd4e77e/modules/packages/Faucet?network=testnet).

- You need a small amount of **testnet APT for gas**. If you don’t have any, use the [official Aptos Testnet faucet](https://aptos.dev/network/faucet) to fund your address.

- Transaction signing only authorizes that specific function call; it does not grant blanket spending permissions/approvals.

- (Optional) If your environment enables [gas sponsorship](https://aptos.dev/build/guides/sponsored-transactions), another account may cover gas and you won’t need test APT.

## About CCIP Test Tokens

CCIP supports specialized test tokens designed for cross-chain testing. These tokens are available on all CCIP-supported testnets.
Expand Down
229 changes: 229 additions & 0 deletions src/features/ccip/components/faucet/AptosTestTokens.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
/* Container - matches existing mint-component pattern */
.container {
display: flex;
margin-top: var(--space-4x);
border: var(--border-width-primary) solid var(--color-border-primary);
border-radius: var(--border-radius-primary);
min-height: 5rem;
flex-direction: column;
padding: var(--space-4x);
background: var(--color-background-primary);
}

/* Wallet connection help */
.walletConnectionHelp {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--space-4x);
text-align: center;
padding: var(--space-4x);
}

/* Wallet selection grid */
.walletSelection {
width: 100%;
max-width: 400px;
margin: 0 auto;
}

.walletList {
display: flex;
flex-direction: column;
gap: var(--space-2x);
}

.walletList button {
width: 100%;
}

/* Connect button wrapper */
.connectButtonWrapper {
width: 100%;
max-width: 300px;
margin: 0 auto;
}

.helpText {
color: var(--color-text-secondary);
font-size: var(--text-sm);
}

/* Primary action area */
.primaryAction {
display: flex;
flex-direction: column;
gap: var(--space-3x);
}

.walletStatus {
text-align: center;
}

.tokenInfo {
color: var(--color-text-secondary);
font-size: var(--text-sm);
margin-top: var(--space-1x);
}

/* Technical details */
.technicalDetails {
margin-top: var(--space-4x);
border: var(--border-width-primary) solid var(--color-border-secondary);
border-radius: var(--border-radius-primary);
padding: var(--space-2x);
}

.technicalDetails summary {
cursor: pointer;
font-weight: 500;
color: var(--color-text-primary);
}

.detailsContent {
padding-top: var(--space-2x);
font-size: var(--text-sm);
color: var(--color-text-secondary);
}

.detailsContent p {
margin: var(--space-1x) 0;
}

/* Success state */
.successMessage {
margin-top: var(--space-4x);
padding: var(--space-3x);
background-color: var(--color-success-background, var(--green-50));
border: var(--border-width-primary) solid var(--color-success-border, var(--green-200));
border-radius: var(--border-radius-primary);
max-width: 300px;
margin-left: auto;
margin-right: auto;
text-align: center;
}

.successSubtext {
font-size: var(--text-sm);
color: var(--color-text-secondary);
margin-top: var(--space-1x);
}

.transactionDetails {
margin-top: var(--space-2x);
padding: var(--space-2x);
background-color: var(--color-background-secondary);
border-radius: var(--border-radius-sm);
font-family: monospace;
font-size: var(--text-xs);
word-break: break-all;
cursor: pointer;
}

.transactionDetails:hover {
background-color: var(--color-background-tertiary);
}

.successActions {
display: flex;
flex-direction: column;
gap: var(--space-2x);
margin-top: var(--space-3x);
width: 100%;
}

.successActions a,
.successActions button {
text-decoration: none;
width: 100%;
text-align: center;
}

/* Error state */
.errorMessage {
margin-top: var(--space-4x);
padding: var(--space-4x);
background-color: var(--color-error-background, var(--red-50));
border: var(--border-width-primary) solid var(--color-error-border, var(--red-200));
border-radius: var(--border-radius-primary);
}

.errorContent {
display: flex;
flex-direction: column;
gap: var(--space-2x);
}

.errorTitle {
margin: 0;
font-weight: 600;
color: var(--color-text-primary);
}

.errorSubtext {
font-size: var(--text-sm);
color: var(--color-text-secondary);
}

.errorTimer {
font-size: var(--text-sm);
color: var(--color-text-primary);
font-weight: 500;
margin-top: var(--space-2x);
padding: var(--space-2x);
background-color: var(--color-background-secondary);
border-radius: var(--border-radius-sm);
font-family: monospace;
}

/* Loading state */
.loadingSpinner {
display: inline-block;
width: 1rem;
height: 1rem;
border: 2px solid var(--color-border-secondary);
border-radius: 50%;
border-top-color: var(--color-primary);
animation: spin 1s ease-in-out infinite;
margin-right: var(--space-1x);
}

@keyframes spin {
to {
transform: rotate(360deg);
}
}

/* Responsive design */
@media (max-width: 768px) {
.container {
margin-top: var(--space-2x);
padding: var(--space-3x);
}

.successActions {
flex-direction: column;
}

.successActions button,
.successActions a {
width: 100%;
text-align: center;
}
}

/* Dark theme support */
[data-theme="dark"] .container {
background: var(--color-background-primary);
border-color: var(--color-border-primary);
}

[data-theme="dark"] .successMessage {
background-color: var(--green-900);
border-color: var(--green-700);
}

[data-theme="dark"] .errorMessage {
background-color: var(--red-900);
border-color: var(--red-700);
}
Loading
Loading