Solana 手续费燃烧设置
<!--StartFragment-->
背景
Solana 默认配置手续费会燃烧50%,有些时候不需要燃烧
配置
先直接说如何配置\ 拿multinode-demo/setup.sh 举例,初始化genesis时,传入 --fee-burn-percentage 0
\ 例如尾部加一行
<!--EndFragment-->
...
default_arg --fee-burn-percentage 0
$solana_genesis "${args[@]}"
<!--StartFragment-->
代码分析
genesis创建时,会读取传入参数
genesis/src/main.rs
<!--EndFragment-->
...
.arg(
Arg::with_name("fee_burn_percentage")
.long("fee-burn-percentage")
.value_name("NUMBER")
.takes_value(true)
.default_value(default_fee_burn_percentage)
.help("percentage of collected fee to burn")
.validator(is_valid_percentage),
)
...
<!--StartFragment-->
手续费派发逻辑
runtime/src/bank/fee_distribution.rs <!--EndFragment-->
pub(super) fn distribute_transaction_fees(&self) {
let collector_fees = self.collector_fees.load(Relaxed);
if collector_fees != 0 {
let (deposit, mut burn) = self.fee_rate_governor.burn(collector_fees); // 燃烧一定比例
if deposit > 0 {
let validate_fee_collector = self.validate_fee_collector_account();
match self.deposit_fees(
&self.collector_id,
deposit,
DepositFeeOptions {
check_account_owner: validate_fee_collector,
check_rent_paying: validate_fee_collector,
},
) {
Ok(post_balance) => {
self.rewards.write().unwrap().push((
self.collector_id,
RewardInfo {
reward_type: RewardType::Fee,
lamports: deposit as i64,
post_balance,
commission: None,
},
));
}
Err(err) => {
debug!(
"Burned {} lamport tx fee instead of sending to {} due to {}",
deposit, self.collector_id, err
);
datapoint_warn!(
"bank-burned_fee",
("slot", self.slot(), i64),
("num_lamports", deposit, i64),
("error", err.to_string(), String),
);
burn += deposit;
}
}
}
self.capitalization.fetch_sub(burn, Relaxed);
}
}
<!--StartFragment--> sdk/program/src/fee_calculator.rs <!--EndFragment-->
pub fn burn(&self, fees: u64) -> (u64, u64) {
let burned = fees * u64::from(self.burn_percent) / 100;
(fees - burned, burned)
}
<!--StartFragment-->
Solana代币燃烧教程
<!--EndFragment--> <!--StartFragment-->
Solana燃烧流动性池教程
<!--EndFragment-->
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。