开发人员能源成本保护

开发者原始能量上限

在主网上部署合约之前,最好能设置一个合理的开发者原始能量上限。 如何合约的用户能量支付比较低 (也就是开发者支付最多的能源),但一直受到之前章节中提到的攻击或显示出脆弱性,则开发者应在部署过程中将 origin_energy_limit (原始能量限制)设为0。 无论面对什么类型的攻击,开发者执行每个智能合约都不应使用超过origin_energy_limit 的能量(单位为能量)。 此参数可防止由 fee_limit设置的惩罚费用和恶意攻击 。 每次执行所消耗的能量都不得大于所设置的能量上限。 默认情况下,在没有此参数的情况下部署的合同(包括启用此功能之前的旧合同),其能量上限将被设置为1e10 Energy。 将其设置为大于1e10的话,则会发生错误。

这个数值可以在Tron-Box 和 Tron-Web 中进行设置

Tron-Box

在Tron-Box上的智能合约部署,所有的全局设置都在tronbox.js文件中。 在此文件中,有一个名为 originEnergyLimit的参数 ,指的是开发者原始能量限制。

module.exports = {
  networks: {
    development: {
      from: 'TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY',
      privateKey: 'da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0',
      consume_user_resource_percent: 30,
      feeLimit: 1e9,
      originEnergyLimit: 1e7,  // Set origin energy limit
      fullHost: 'https://api.shasta.trongrid.io',
      network_id: "*" // Match any network id
    },
  }
};

Tron-Web

tronweb.contract.new 的API调用传入一个叫originEnergyLimit的参数。 这个参数指的是开发者原始能量限制。

let abi = 'abi';
let code = 'bytecode';
async function deploy_contract() {
  let contract_instance = await tronWeb.contract().new({
    abi: JSON.parse(abi),
    bytecode: code,
    feeLimit: 1e9,
    callValue: 0,
    userFeePercentage: 30,
    originEnergyLimit: 1e7,  // Set origin energy limit
    parameters: [param1, param2, param3, ...]
  })
  console.log(contract_instance.address);
}
deploy_contract();

更新开发者原始能量上限

在一个合约部署后,它的开发者原始能量限制可以通过端点 updateEnergyLimit进行调整。 签名 & 将该调用广而告之以确保其生效。