IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 142-Solana入门(六) -> 正文阅读

[区块链]142-Solana入门(六)

很不错的文章

https://betterprogramming.pub/getting-started-with-solana-for-solidity-developers-ee97a9bdf7ed

今天来对比一下evm和solana

在evm中,我们是直接把东西存到合约里面,比如

contract EthereumExample {
  struct Author {
    uint256 publications;
    uint256 likes;
  }
  
  Author public author;
  
  function publish() public {
      author.publications += 1;
  }
}

但是solana不一样

solana合约是无状态的,把他们想象成指令
这些program不保存任何的数据或者状态
所有的数据都保存在accounts里面
accounts保存数据
当你要调用solana合约的方法时,就要把数据也传进去

#[program]
pub mod solana_example {
    use super::*;
    pub fn publish(ctx: Context<AuthorData>) -> ProgramResult {
        let author_account = &mut ctx.accounts.author_account;
        author_account.publications += 1;
        Ok(())
    }
}

#[derive(Accounts)]
pub struct AuthorData<'info> {
    #[account(mut)]
    pub author_account: Account<'info, AuthorAccount>,
}

#[account]
pub struct AuthorAccount {
    pub publications: u64,
    pub likes: u64,
}


Solana accounts
Account是个很模糊的词,在solana,一个account表示一个存储单位
有2种account
1是data account
2是program account
部署program的时候,代码就保存在program account里面

举例:
有一个counter程序,那就要创建2个账户,一个account保存程序代码,一个account保存counter值

accounts有公钥、地址,还有私钥
authority表示私钥持有者

accounts也保存余额,solana余额
solana的货币单位是sol和lamport
1 sol = 10^9 lamports
就像eth和wei

在solana存储不是免费的,所以创建账户也不是免费的,需要支付rent
但是存2年的rent到账户里面就可以免除rent,一般都是直接保存2年rent

account存储
1.lamports
2.owner
3.executable
4.data
5.rent-epoch
data字段保存code或者data

eth也有2种账户
1.外部账户,就是普通账户
2.合约账户

eth中,只有可执行账户才可以存储
但是solana中,所有账户都可以存储
但是可执行账户保存的是byte code
其他的data保存在non-executable账户
这些non-executable账户全都是被executable账户拥有的

owner字段
为了确保合约能够修改其他合约的状态,每个data account都分配了一个owner program,owner program可以修改账户状态
默认下,owner program是solana的system program

solana的问题
如果在solana上面部署了一个program,然后用web去和程序交互,每次调用程序的时候,都要把data account传进去
你需要这个data account的私钥
那么你怎么保存私钥呢,最好是把这个私钥保存到program里面
Program Derived Addresses
PDAs就解决了这个问题

Program Derived Addresses (PDAs)
你用program的变量创建了一个地址,这就是一个derived account
solana提供了一个helper function来获取这个地址

更具体地说,PDAs是从programID和一些seeds中获取的
programID是solana程序的地址,seeds可以是程序任意选择的
findProgramDerivedAddress可以获取PDA

PDA解决了一些问题
1.不需要管理storage account的私钥
2.PDA可以把用户信息保存在不同的accounts里面

总结一下
PDA的owner是program,而且没有私钥


?

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:14:47  更:2022-05-07 11:15:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:30:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码