当前位置: 首页 > news >正文

solana 编写智能合约 然后调用它

我们采用 Rust 开发智能合约,并通过 Web3 和 Go 实现合约调用。通过Solana Playground | Solana IDE 编写智能合约

1.使用 rust 编写一个

这个智能合约  内容就是输出一行文字

 

// 导入 solana_program
// account_info 账户详细信息
// entrypoint 程序入口
// msg 在 Solana 上打印信息
use solana_program::{account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,
};//定义代码入口 开始执行是能合约
entrypoint!(process_instruction);// 定义一个名为 process_instruction 的公共函数。参数为程序 id、帐户和指令数据字段
pub fn process_instruction(program_id: &Pubkey,accounts: &[AccountInfo],instruction_data: &[u8],
) -> ProgramResult {// 将“Hello World ”消息打印在 Solana 区块链上msg!("Hello, Solana! add  wen3");// 向系统返回状态代码来退出程序,Ok(())
}

2.内置 的 web3 来调用

 这个就是 web3 调用 智能 合约的, pg.PROGRAM_ID 就是这个编辑器内置的一个 变量。也就是我们发布的 智能合约地址

 

// Client
console.log("My address:", pg.wallet.publicKey.toString());
const balance = await pg.connection.getBalance(pg.wallet.publicKey);
console.log(`My balance: ${balance / web3.LAMPORTS_PER_SOL} SOL`);// 使用 web3.Transaction() 创建一个新的 Tx
const transcation = new web3.Transaction();// 创建一个 Instruction
// Keys[]中列出了交易中涉及的所有帐户和它们各自的访问权限(例如,是否可以读取、写入等),因为代码不需要与用户帐户交互,所以这里Keys[]为空
transcation.add(new web3.TransactionInstruction({keys: [],programId: new web3.PublicKey(pg.PROGRAM_ID),})
);console.log("Sending transaction ...");// 调用 sendAndConfirmTransaction() 方法,参数为 端口、交易、签名的私钥数组
const txHash = await web3.sendAndConfirmTransaction(pg.connection,transcation,[pg.wallet.keypair]
);//打印消息记录到控制台,并显示哈希值
console.log("transaction send with hash", txHash);

调用成功 这个就有输出:

3. 使用 go for solana-go-sdk 调用

这是SDK 地址, 里面分装了很多功能,使用起来比 官方的方便。

func Info(con *gin.Context) {c := client.NewClient(appSolana.RpcClientType())//最近的一个区块地址res, err := c.GetLatestBlockhash(context.Background())if err != nil {logger.Error().Msg(err.Error())}//拼接合约调用tx, err := types.NewTransaction(types.NewTransactionParam{Message: types.NewMessage(types.NewMessageParam{FeePayer:        appSolana.FeedWallet.PublicKey,RecentBlockhash: res.Blockhash,Instructions: []types.Instruction{//智能合约 地址 应为我们目前不需要参数 和 其他地址types.Instruction{ProgramID: common.PublicKeyFromString("2SKHaqHzYWwRKPJYbxyP4x2pe7wqwJe6qSdSttWsxDBQ"), //调用合约的地址},},}),Signers: []types.Account{appSolana.FeedWallet},})if err != nil {logger.Error().Msg(err.Error())}txHash, errHash := c.SendTransaction(context.Background(), tx)if errHash != nil {logger.Error().Msg(errHash.Error())}logger.Info().Msg(txHash)
}

相关文章:

  • C#/.NET/.NET Core技术前沿周刊 | 第 42 期(2025年6.9-6.15)
  • Debian 编译安装 ruby3.2
  • webpack到vite的改造之路
  • SOME/IP学习随笔
  • Trae - 非科班在建模比赛中的 AI 编程手|AI编程社知识库精选
  • vscode snippet 工程模板文件分享
  • 【SSH】在VScode中配置SSH
  • 一次硬件恢复之后数据文件0kb的故障恢复---惜分飞
  • 本地生活是如何进行抽佣的
  • 19|Whisper+ChatGPT:请AI代你听播客
  • Flask 快速精通:从入门到实战的轻量级 Web 框架指南
  • git submodule 和git repo介绍
  • 告别微服务,迎接SCS(Self-Contained Systems)?新概念还是炒冷饭?
  • 算法 学习 排序 2025年6月16日10:25:37
  • MySQL 命令行的核心操作命令详解
  • 始理解NLP:我的第一章学习心得
  • SQL注入漏洞-下篇
  • Hive 3.x集成Apache Ranger:打造精细化数据权限管理体系
  • 【Unity笔记】Unity URP 渲染中的灯光数量设置— 场景、使用方法与渲染原理详解
  • Mac Mini M4 安装 jdk8 以及 隐藏 设置内的Java菜单
  • 做交友网站的前景/合肥新闻 今天 最新消息
  • 上海网站论坛建设/网站推广的方式有
  • 做网站的ebay网/百度推广如何获取精准的客户
  • 大连做网站报价/产品营销软文
  • asp 公司网站/友情链接样式
  • 有梦商城公司网站/怎么做推广网站