如果想在Solana链发代币的话,和EVM链不一样,solana不需要写任何链上合约(程序),前端可以直接调用spl-token库就可以了。通过npm安装就可以了。npminstall@solana/spl-tokennpminstall@solana/web3.js准备工作,
如果想在Solana链发代币的话,和EVM链不一样,solana不需要写任何链上合约(程序),前端可以直接调用spl-token库就可以了。
通过npm安装就可以了。
npm install @solana/spl-token
npm install @solana/web3.js
准备工作,先链接网络,把账号准备好。 pay这个账号就是将要发行token的账号。
let connect = new Connection(clusterApiUrl('devnet'), {wsEndpoint:"wss://docs-demo.solana-devnet.quiknode.pro/"});
let secretKey = Uint8Array.from([254, 233, 47, 184, 38, 87, 109, 215, 23, 19, 232, 58, 158, 100, 20, 113, 114, 166, 245, 54, 156, 124, 150, 200, 102, 168, 189, 23, 167, 217, 250, 37, 4, 250, 253, 205, 123, 153, 120, 40, 76, 97, 155, 241, 245, 242, 16, 124, 107, 84, 183, 155, 167, 20, 153, 15, 155, 181, 72, 219, 246, 224, 14, 112])
let pay = Keypair.fromSecretKey(secretKey);
console.log("pay", pay.publicKey.toString());
通过createMint方法就可以发行一个代币了,返回的就是代币的地址,当然需要pay账户有SOL才能创建成功。
let tokenAddress = await createMint(
connect, // conneciton
pay, // fee payer
pay.publicKey, // mint authority
pay.publicKey, // freeze authority
9 // decimals
); //8yF7Mo9FhQACT4rXz5DVxCLPJ4ocfem9foGzmd9DKwAm
console.log("mintPubkey", tokenAddress.toString());
可以通过getMint方法获取发行的代币信息。
let tokenAddress = new PublicKey("8yF7Mo9FhQACT4rXz5DVxCLPJ4ocfem9foGzmd9DKwAm")
let mint = await getMint(connect, tokenAddress);
上面只是发行了一个代币,但是还没有mint出来。 如果要mint代币的话,需要先生成一个代币账号,也就是一个属于pay账户的子账号(ATA),然后把代币mint到这个子账号里面。
//获取pay的这个代币子账号
let mintATA = await getAssociatedTokenAddress(tokenAddress, pay.publicKey);
console.log("ata ", mintATA.toString());
let txhash1 = await mintToChecked(
connect, // connection
pay, // fee payer
tokenAddress, // mint
mintATA, // receiver (should be a token account)
pay, // mint authority
100, // amount. if your decimals is 9, you mint 10^9 for 1 token.
9 // decimals
);
console.log("mintToChecked", txhash1);
转代币给另一个账户的话,也需要先给接收账户先创建一个ATA账号,然后是pay账户的ATA账号转给接收账户的ATA账号。
let toPubkey = new PublicKey("B2V5kYvGyBGyoYvFJzYJh8ighH2Hn6FdM8xxgqMq9cbK");
//获取接收者toPubkey的这个代币子账号
let toATA = await getAssociatedTokenAddress(tokenAddress, toPubkey);
console.log("ata2 ", toATA.toString());
let txhash2 = await transferChecked(
connect, // connection
pay, // payer
mintATA, // from (should be a token account)
tokenAddress, // mint
toATA, // to (should be a token account)
pay, // from's owner
1, // amount, if your deciamls is 8, send 10^8 for 1 token
9 // decimals
);
console.log("transferChecked", txhash2);
let tokenAccount = await getAccount(connect, toATA);
console.log("tokenAccount.amount ", tokenAccount.amount);
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!