今天学习内容decert.me上面的solana课程因为之前已经学了一点点rust和solana了,今天感觉比较轻松。入门了@solana/web3.js的使用,包括配置不同的devnetrpc,我用的是quicknode,感觉比ankr好,solana.com
decert.me 上面的 solana 课程
因为之前已经学了一点点 rust 和 solana 了,今天感觉比较轻松。
入门了 @solana/web3.js
的使用,包括
solana airdrop
领了 devnet 的测试币,以及体验了 solana transfer
今天遇到的问题是对钱包的连接和使用不熟悉,还在探索阶段。
这几天的目标是把教程的电影 dapp 完成。
solana 中一切皆账户
solana 怎么支持并发:solana 上的智能合约(程序)都是无状态的,数据存储在单独的账户中,需要执行的时候通过声明只读和可写,如果是只读的数据,完全可以并发执行而无需考虑写导致的问题。
数据存储在单独的账户中,需要保证账户除了合约外不受其他控制,所以有 program derived address(PDA),只有地址没有私钥。
数据的存储可以通过 programId + seed 来推导出特定的 pda 地址。
因此可以实现一个合约管理某个数据。
如果数据特别大呢?比如保存100个人的点赞,可以用一个数据账户存,也可以把每个人的数据单独分开存一个数据账户。
怎么单独分开呢?programId + 用户的 publicKey,这样保证每个人的数据都是独立的。这里的种子对应的就是用户的地址。
同理,如果不仅要存点赞,还要存评论数据呢?
还是从种子入手,种子可以是 programId + 用户的 publicKey + 文章标题,这样就可以明确的找到所需的数据。
虽然合约是相同的那一个程序,但是种子+用户地址,可以隔离出单独的数据账户,相当于每个人自己拥有一份数据库,这可能也是 web3 去中心化并且用户拥有自己的数据权利的原因。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!