Solana指令解析-compute budget

Solana指令解析-compute budget

什么是compute budget?

  • compute budget称为计算预算,是 Solana 区块链中用于管理计算资源的概念。该程序负责管理计算资源的分配和价格设置,以确保 Solana 网络上的计算任务得到适当的资源配额和报酬。
  • compute budget定义了用户或智能合约可以使用的计算资源的限额,包括计算单位数(compute units)和内存分配。每个计算单位代表一定量的 CPU 时间和其他计算资源。计算单位的数量和价格是由网络中的 Compute Budget 程序管理和设置的。
  • ComputeBudgetProgramID : ComputeBudget111111111111111111111111111111

compute budget 指令汇总

指令说明
RequestUnits0创建一个关联代币账户
RequestHeapFrame1请求堆栈帧
SetComputeUnitLimit2设置计算单位限制
SetComputeUnitPrice3设置计算单位价格

源码地址:github.com/blocto/solana-go-sdk/program/compute_budget

1.RequestUnits

用于向计算预算程序请求计算资源单位,不涉及任何账户。

1.1源码
type RequestUnitsParam struct {
	Units         uint32
	AdditionalFee uint32
}

// RequestUnits ...
func RequestUnits(param RequestUnitsParam) types.Instruction {
	data, err := borsh.Serialize(struct {
		Instruction   Instruction
		Units         uint32
		AdditionalFee uint32
	}{
		Instruction:   InstructionRequestUnits,
		Units:         param.Units,
		AdditionalFee: param.AdditionalFee,
	})
	if err != nil {
		panic(err)
	}

	return types.Instruction{
		ProgramID: common.ComputeBudgetProgramID,
		Accounts:  []types.AccountMeta{},
		Data:      data,
	}
}
1.2指令参数
  • Units: 表示请求的计算单位数量,即希望分配的计算资源量。
  • AdditionalFee: 表示请求计算资源时额外的费用,可能用于支付网络使用或其他费用。在某些情况下,除了请求的计算资源外,还可能需要支付一定的附加费用。

2.RequestHeapFrame

用于向计算预算程序请求堆栈帧资源,不涉及任何账户。

2.1源码
type RequestHeapFrameParam struct {
	Bytes uint32
}

// RequestHeapFrame ...
func RequestHeapFrame(param RequestHeapFrameParam) types.Instruction {
	data, err := borsh.Serialize(struct {
		Instruction Instruction
		Bytes       uint32
	}{
		Instruction: InstructionRequestHeapFrame,
		Bytes:       param.Bytes,
	})
	if err != nil {
		panic(err)
	}

	return types.Instruction{
		ProgramID: common.ComputeBudgetProgramID,
		Accounts:  []types.AccountMeta{},
		Data:      data,
	}
}
2.2指令参数
  • Bytes 表示请求的堆栈帧大小(以字节为单位)。调用此指令将会为程序分配堆栈帧,以便在程序执行期间存储局部变量和临时数据。

3.SetComputeUnitLimit

用于设置计算预算程序中的计算资源上限,不涉及任何账户。

3.1源代码
type SetComputeUnitLimitParam struct {
	Units uint32
}

// SetComputeUnitLimit set a specific compute unit limit that the transaction is allowed to consume.
func SetComputeUnitLimit(param SetComputeUnitLimitParam) types.Instruction {
	data, err := borsh.Serialize(struct {
		Instruction Instruction
		Units       uint32
	}{
		Instruction: InstructionSetComputeUnitLimit,
		Units:       param.Units,
	})
	if err != nil {
		panic(err)
	}

	return types.Instruction{
		ProgramID: common.ComputeBudgetProgramID,
		Accounts:  []types.AccountMeta{},
		Data:      data,
	}
}
3.2指令参数

- Units 表示要设置的计算单元限制值。调用此指令将会设置交易允许消耗的最大计算单元数目。

4.SetComputeUnitPrice

用于设置计算预算程序中的计算资源价格,不涉及任何账户。

4.1源码
type SetComputeUnitPriceParam struct {
	MicroLamports uint64
}

// SetComputeUnitPrice set a compute unit price in "micro-lamports" to pay a higher transaction
// fee for higher transaction prioritization.
func SetComputeUnitPrice(param SetComputeUnitPriceParam) types.Instruction {
	data, err := borsh.Serialize(struct {
		Instruction   Instruction
		MicroLamports uint64
	}{
		Instruction:   InstructionSetComputeUnitPrice,
		MicroLamports: param.MicroLamports,
	})
	if err != nil {
		panic(err)
	}

	return types.Instruction{
		ProgramID: common.ComputeBudgetProgramID,
		Accounts:  []types.AccountMeta{},
		Data:      data,
	}
}

4.1指令参数
  • MicroLamports 表示以 “lamport” 为单位的计算单元价格。调用此指令将会设置交易中每个计算单元的价格,以便为更高的交易优先级支付更高的交易费用。
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值