Solana里一切都是Account(等同于Linux的一切都是文件,Rust的一切都是类型),Account有两类,如下:
* 一般账户 = 有Pubkey的,Owner是SystemProgram的,位于椭圆曲线上的 能碰出来几个首字母的那种。代码里的这个东东 = Solana_pogram::pubkey::Pubkey。
* PDA = Program Derived, 从Program中派生出来的, 别跟一般账户冲突哦,要推出椭圆曲线(加个Seed再做hash),再加Bump类似nonce的东西,防止PDA成为Pubkey。
总结下: 确定一个PDA的三要素: ProgramID, Seed, Bump。Bump作为一个属性放到普通Account的结构中。
### 生成一个PDA
区块链中一般使用Map记录地址和对应的数据, 即,使用一个地址作为Key,寻找对应的数据Account(Value)。
Solana中, Key是Seeds,Value是PDA。
而 Seeds = Program中Account的名字(字面值) + 用户的Pubkey。
这样, Seeds - Program - User的Pubkey就关联起来了。Anchor context中的bumps具有get bump的函数,bump和Accout字面值对应。
举个例子:老师要做一次考试
Instruction 函数叫go_exam