链上数据存储

账号所有权

  • 账号可以通过 Metadata 指定一个 Program 作为拥有者(Owner);
  • Program 作为拥有者可以:
    1. 修改账号数据;
    2. 可以使用该 PDA 进行签名。

PDA(Program Derived Address) 1

使用 PDA 进行合约状态链上存储。

  1. PDA 只有一个类似公钥的地址,但是没有对应的私钥;
  2. 链下生成:通过 PublicKey.findProgramAddress 生成 PDA,seeds 用于生成多个 PDA;
  3. 链上创建:将 PDA 作为账号传递给 Program 进行链上创建:填充足够的 lamports 用于支付租金、开辟空间、指定 program 作为 Owner。

创建一个计数器

  1. 部署智能合约;
  2. 生成一个 PDA 并进行链上创建;
  3. 增加计数器;
  4. 其他账号获取 PDA,并增加计数器;

使用 Anchor 重写计数器

安装 Anchor

  1. 安装 Yarn
  2. 安装 avm
    cargo install --git https://github.com/project-serum/anchor avm --locked --force
    
  3. 使用 avm 安装 anchor
    avm install latest
    avm use latest
    

创建 anchor 项目

anchor init hello-anchor

anchor 项目结构