Skip to content

Commit 99db117

Browse files
authored
feat: solana adapter deployment (#1009)
1 parent 0fee026 commit 99db117

File tree

6 files changed

+2196
-2
lines changed

6 files changed

+2196
-2
lines changed

deploy/065_deploy_solana_adapter.ts

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import assert from "assert";
2+
import { HardhatRuntimeEnvironment } from "hardhat/types";
3+
import { DeployFunction } from "hardhat-deploy/types";
4+
import { USDC, L1_ADDRESS_MAP } from "./consts";
5+
import {
6+
fromBase58ToBytes32,
7+
getSolanaChainId,
8+
SOLANA_USDC_MAINNET,
9+
SOLANA_USDC_DEVNET,
10+
SOLANA_SPOKE_STATE_SEED,
11+
} from "../src/svm/web3-v1";
12+
import { getDeployedAddress } from "../src/DeploymentUtils";
13+
import { PublicKey } from "@solana/web3.js";
14+
import { getAssociatedTokenAddressSync, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from "@solana/spl-token";
15+
16+
/**
17+
* Note:
18+
* This adapter supports only USDC for Solana mapping EVM sepolia to SVM devnet and EVM mainnet to SVM mainnet.
19+
*
20+
* Usage:
21+
* $ yarn hardhat deploy --network mainnet --tags solanaAdapter
22+
*/
23+
24+
const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
25+
assert(hre.network.name === "mainnet" || hre.network.name === "sepolia", "EVM network must be mainnet or sepolia");
26+
const solanaCluster = hre.network.name === "mainnet" ? "mainnet" : "devnet";
27+
const svmChainId = getSolanaChainId(solanaCluster).toString();
28+
29+
const svmSpokePool = getDeployedAddress("SvmSpoke", svmChainId);
30+
assert(svmSpokePool !== undefined, "SvmSpoke program not deployed for the selected cluster");
31+
32+
const solanaUsdc = solanaCluster === "mainnet" ? SOLANA_USDC_MAINNET : SOLANA_USDC_DEVNET;
33+
const [statePda, _] = PublicKey.findProgramAddressSync(
34+
[Buffer.from("state"), SOLANA_SPOKE_STATE_SEED.toArrayLike(Buffer, "le", 8)],
35+
new PublicKey(svmSpokePool)
36+
);
37+
const solanaUsdcVault = getAssociatedTokenAddressSync(
38+
new PublicKey(solanaUsdc),
39+
statePda,
40+
true,
41+
TOKEN_PROGRAM_ID,
42+
ASSOCIATED_TOKEN_PROGRAM_ID
43+
).toBase58();
44+
45+
const { deployer } = await hre.getNamedAccounts();
46+
const chainId = parseInt(await hre.getChainId());
47+
48+
const constructorArguments = [
49+
USDC[chainId],
50+
L1_ADDRESS_MAP[chainId].cctpTokenMessenger,
51+
L1_ADDRESS_MAP[chainId].cctpMessageTransmitter,
52+
fromBase58ToBytes32(svmSpokePool),
53+
fromBase58ToBytes32(solanaUsdc),
54+
fromBase58ToBytes32(solanaUsdcVault),
55+
];
56+
57+
const { address: deployment } = await hre.deployments.deploy("Solana_Adapter", {
58+
from: deployer,
59+
log: true,
60+
skipIfAlreadyDeployed: true,
61+
args: constructorArguments,
62+
});
63+
64+
await hre.run("verify:verify", { address: deployment, constructorArguments });
65+
};
66+
67+
module.exports = func;
68+
func.tags = ["solanaAdapter", "mainnet"];

deployments/deployments.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"Ink_Adapter": { "address": "0x7e90a40c7519b041a7df6498fbf5662e8cfc61d2", "blockNumber": 21438590 },
3535
"Cher_Adapter": { "address": "0x0c9d064523177dBB55CFE52b9D0c485FBFc35FD2", "blockNumber": 21597341 },
3636
"Lens_Adapter": { "address": "0x63AC22131eD457aeCbD63e6c4C7eeC7BBC74fF1F", "blockNumber": 22167069 },
37-
"DoctorWho_Adapter": { "address": "0xFADcC43096756e1527306FD92982FEbBe3c629Fa", "blockNumber": 21773451 }
37+
"DoctorWho_Adapter": { "address": "0xFADcC43096756e1527306FD92982FEbBe3c629Fa", "blockNumber": 21773451 },
38+
"Solana_Adapter": { "address": "0x1E22A3146439C68A2d247448372AcAEe9E201AB1", "blockNumber": 22566473 }
3839
},
3940
"10": {
4041
"SpokePool": { "address": "0x6f26Bf09B1C792e3228e5467807a900A503c0281", "blockNumber": 93903076 },
@@ -169,7 +170,8 @@
169170
"Lisk_Adapter": { "address": "0x13a8B1D6443016424e2b8Bac40dD884Ee679AFc4", "blockNumber": 6226289 },
170171
"Lens_Adapter": { "address": "0x8fac6F764ae0b4F632FE2E6c938ED5637E629ff2", "blockNumber": 7448085 },
171172
"Blast_Adapter": { "address": "0x09500Ffd743e01B4146a4BA795231Ca7Ca37819f", "blockNumber": 6233857 },
172-
"DoctorWho_Adapter": { "address": "0x2b482aFb675e1F231521d5E56770ce4aac592246", "blockNumber": 7698546 }
173+
"DoctorWho_Adapter": { "address": "0x2b482aFb675e1F231521d5E56770ce4aac592246", "blockNumber": 7698546 },
174+
"Solana_Adapter": { "address": "0x9b2c2f3fD98cF8468715Be31155cc053C56f822A", "blockNumber": 8409722 }
173175
},
174176
"37111": {
175177
"SpokePool": { "address": "0x6A0a7f39530923911832Dd60667CE5da5449967B", "blockNumber": 156275 },

0 commit comments

Comments
 (0)