Solana SPL-Token使用

  • dlnuchunge
  • 更新于 2024-04-18 14:37
  • 阅读 2752

如果想在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());

1、发行Token

通过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);

2、mint代币

上面只是发行了一个代币,但是还没有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);

3、转代币

转代币给另一个账户的话,也需要先给接收账户先创建一个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);

4、查询代币余额

let tokenAccount  = await getAccount(connect, toATA);
console.log("tokenAccount.amount ", tokenAccount.amount);
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

4 条评论

请先 登录 后评论
dlnuchunge
dlnuchunge
0x0d2e...8b3F
看好Web3,自学Web3前端,想找份Web3相关工作!