https://solscan.io/tx/29K1qkR9U3v636KyBDyQ8Z49M4HZaJeaMgeLJbugQjffqD6EeYxnW2FhbN4FAkAhdVtUQRNr84EB3pEFJuHvVtfK以这个打赏 $v2ex 的交易为例,有 4 条指令(设置 cu price ; Token Program 转账;和两条 Phantom 插件生成的断言指令)。
如果不设置 cu limit ,对于 builtin instruction (如设置 cu price/ 设置 cu limit / SOL 转账),默认是 3000 ;
对于非 builtin instruction (如 Token 转账,Phantom 插件生成的断言)默认是 200000.
所以上述交易默认是 3000 + 200000 + 200000 + 200000 = 603000 的 cu 上限。
计算下交易的优先费是 603000 (cu) x 5000 (micro lamports/cu) = 3015 lamports ,和 solscan 上的一致。
但是实际上真正消耗的有用的 cu 只有设置 cu price (固定的 300 ),Token 转账( 4644 ),总共 4944 ,浪费了超过 100 倍。
建议在提交之前,先用 simulateTransaction 算一下要消耗多少 cu ,然后设置 cu limit ,这样就可以给较高的 cu price 了。