solana

账户

solana上一切都是数据

  • 任何人都可以向账户中充值,读取数据,只有账户的所有者可以扣除金额和修改数据
    账户数据结构
  1. key: 账户地址
  2. lamports: 余额,1sol大概是10亿个lamports
  3. data:账户数据,u8类型
  4. is_executable: bool,可执行标志,如果为真说明是可执行程序,如果是假说明只是一个数据账户
  5. owner: 所有者,只有所有者有能力更新账户数据

Programs

相当于evm的智能合约

  • 程序只能读取和修改其他账户的数据,这使得程序可以并行执行,每个账户都有一个所有者,只有程序才能写入账户数据

instructions

程序指令

1
2
3
4
5
6
7
8
9
{
program_id: number,
keys: Array<{
key: PublicKey,
is_mutable: boolean,
is_signer: boolean,
}>,
data: Uint8Array,
}
  1. program_id: 程序ID,实际执行指令的程序
  2. keys:是个数组,这些都是参与执行特定指令的账户,每个在交易内或特定于指令内被触及的地址或账户,都必须在指令内提供值和地址。
  3. data: action+args,数据通过网络发送到实际交互的那个程序,也就是那个程序id,所有这些指令(可以有多个),将他们在一次交易内捆绑在一起,一次交易是发送到RPC或者solana网络验证者的东西,然后通过领导者过程和整个网络执行

Transactions

1
2
3
4
5
6
7
8
{
message: {
instructions: Array
recent_blockhash: number,
fee_payer: publicKey,
},
signers: Array
}
  1. instructions: 指令数组,这次交易尝试执行的指令列表
  2. recent_blockhash: 最近的区块hash,用于交易的去重复
  3. fee_payer: 支付gas的地址
  4. signers: 所有签名者数组

交易和指令小结

  1. 程序调用指令
  2. 指令通过交易发送
  3. 交易是原子的
  4. 所有交易必须签名
作者

Ginta

发布于

2025-05-17

更新于

2025-05-27

许可协议

评论