在登链社区挑战100天学习web3——第2天,solana 入门钱包连接+账户模型的理解

  • zero.eth
  • 更新于 2024-08-16 21:45
  • 阅读 875

今天学习内容decert.me上面的solana课程因为之前已经学了一点点rust和solana了,今天感觉比较轻松。入门了@solana/web3.js的使用,包括配置不同的devnetrpc,我用的是quicknode,感觉比ankr好,solana.com

今天学习内容

decert.me 上面的 solana 课程

因为之前已经学了一点点 rust 和 solana 了,今天感觉比较轻松。

入门了 @solana/web3.js 的使用,包括

  • 配置不同的 devnet rpc,我用的是 quicknode,感觉比 ankr 好,solana.com 因为网络限制原因,访问不了
  • solana airdrop 领了 devnet 的测试币,以及体验了 solana transfer
  • 同样的,使用 js 包完成了余额查询和转账。

今天遇到的问题是对钱包的连接和使用不熟悉,还在探索阶段。

这几天的目标是把教程的电影 dapp 完成。

关于 solana 账户模型的理解

solana 中一切皆账户

  • 用户钱包
  • 智能合约(程序)
  • 和智能合约交易的数据

solana 怎么支持并发:solana 上的智能合约(程序)都是无状态的,数据存储在单独的账户中,需要执行的时候通过声明只读和可写,如果是只读的数据,完全可以并发执行而无需考虑写导致的问题。

数据存储在单独的账户中,需要保证账户除了合约外不受其他控制,所以有 program derived address(PDA),只有地址没有私钥。

数据的存储可以通过 programId + seed 来推导出特定的 pda 地址。

因此可以实现一个合约管理某个数据。

如果数据特别大呢?比如保存100个人的点赞,可以用一个数据账户存,也可以把每个人的数据单独分开存一个数据账户。

怎么单独分开呢?programId + 用户的 publicKey,这样保证每个人的数据都是独立的。这里的种子对应的就是用户的地址。

同理,如果不仅要存点赞,还要存评论数据呢?

还是从种子入手,种子可以是 programId + 用户的 publicKey + 文章标题,这样就可以明确的找到所需的数据。

虽然合约是相同的那一个程序,但是种子+用户地址,可以隔离出单独的数据账户,相当于每个人自己拥有一份数据库,这可能也是 web3 去中心化并且用户拥有自己的数据权利的原因。

点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

3 条评论

请先 登录 后评论
zero.eth
zero.eth
0xD736...60aa
江湖只有他的大名,没有他的介绍。