IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 部署一个合约花费了3.5ETH - GasLimit和GasPrice谨慎设值区间 -> 正文阅读

[区块链]部署一个合约花费了3.5ETH - GasLimit和GasPrice谨慎设值区间

在这里插入图片描述
话不多说,请看上图

正常情况下,我们部署合约到以太坊网络上,会花费0.01 - 1个ETH这个区间,当你部署合约时,Gas费超过了1个ETH,部署脚本就会告诉你部署一个合约建议不要超过1个ETH,你应该检查下你的代码或脚本,然后部署脚本终止部署。

但是某种情况是,你自己使用web3.js或者ethers.js部署的合约,gas limit和gas price是你自己设置的值,你没有写提示拦截等逻辑,然后设置了一个很大的值,结果就导致部署一个简单的合约,花费了巨大的价钱。

const fs = require('fs');
const solc = require('solc');
const Web3 = require('web3');

// 获取到合约sol文件
const myContractSol = fs.readFileSync('../contracts/MyContractLogic.sol');
// 编译前格式化合约
var input = {
  language: 'Solidity',
  sources: { 
    'myContractSol': {
        content: myContractSol().toString()
    }
  },
  settings: {
    outputSelection: {
      '*': {
        '*': ['*']
      }
    }
  }
};

// 编译合约
var output = JSON.parse(solc.compile(JSON.stringify(input)));
console.log(output)

// 获取编译后合约的字节码
const bytecode = output.contracts.SuperConfig.SuperConfig.evm.bytecode.object;
// 获取编译后合约的abi
const abi = output.contracts.SuperConfig.SuperConfig.abi;

 // Ethereum的RPC
let rpcUrl = "https://mainnet.infura.io/v3/your-key";
const web3 = new Web3(new Web3.providers.HttpProvider(rpcUrl)); 

// 设置使用哪个账号进行部署
const privateKey = '0x00xxxxxxx';
const account = web3.eth.accounts.privateKeyToAccount(privateKey);
web3.eth.accounts.wallet.add(account);
web3.eth.defaultAccount = account.address;

// 使用web3.js部署
const contract = new web3.eth.Contract(abi);
contract.deploy({
    data: "0x" + bytecode,
})
.send({
    from: account.address,   
    gas: 5000000,
    gasPrice: 800 * (10 ** 9), 
}, function(error, transactionHash){ 
    console.log("=====error, transactionHash: ", error, transactionHash)  
})
.on('error', function(error){ 
    console.log("=====error: ", error)  
 })
.on('transactionHash', function(transactionHash){ 
    console.log("=====transactionHash: ", transactionHash)    
})
.on('receipt', function(receipt){
    console.log("receipt合约地址:", receipt.options) 
})
.on('confirmation', function(confirmationNumber, receipt){ 
    console.log("=====confirmation:", confirmationNumber)
 })
.then(function(newContractInstance){
    console.log("last合约地址:", newContractInstance.options) 
});

知道在哪一行了吗?就是Send()那个函数,当时的情况是,网络特别拥堵,我试了2天都不能部署成功,就一直增加gas limit和gas price,结果吧,之前发出去的那些交易,有一些被成交了,有一些超时被取消了。

然后就是设置gas比较的高的那两笔交易被意外成交了,可惜了我的ETH。

发此文章就是警告自己,小心谨慎设值gas limit和gas price,可以跟MetaMask学习,缓慢的增加gas limit和gas price.

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:02:42  更:2022-01-12 00:03:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:46:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码