solana
账户
solana上一切都是数据
- 任何人都可以向账户中充值,读取数据,只有账户的所有者可以扣除金额和修改数据
账户数据结构
- key: 账户地址
- lamports: 余额,1sol大概是10亿个lamports
- data:账户数据,u8类型
- is_executable: bool,可执行标志,如果为真说明是可执行程序,如果是假说明只是一个数据账户
- owner: 所有者,只有所有者有能力更新账户数据
Programs
相当于evm的智能合约
- 程序只能读取和修改其他账户的数据,这使得程序可以并行执行,每个账户都有一个所有者,只有程序才能写入账户数据
instructions
程序指令
1 | { |
- program_id: 程序ID,实际执行指令的程序
- keys:是个数组,这些都是参与执行特定指令的账户,每个在交易内或特定于指令内被触及的地址或账户,都必须在指令内提供值和地址。
- data: action+args,数据通过网络发送到实际交互的那个程序,也就是那个程序id,所有这些指令(可以有多个),将他们在一次交易内捆绑在一起,一次交易是发送到RPC或者solana网络验证者的东西,然后通过领导者过程和整个网络执行
Transactions
1 | { |
- instructions: 指令数组,这次交易尝试执行的指令列表
- recent_blockhash: 最近的区块hash,用于交易的去重复
- fee_payer: 支付gas的地址
- signers: 所有签名者数组
交易和指令小结
- 程序调用指令
- 指令通过交易发送
- 交易是原子的
- 所有交易必须签名