GVKun编程网logo

错误创建MyToken错误:基本费用超出了在以太坊混音中部署智能合约的限制

5

此处将为大家介绍关于错误创建MyToken错误:基本费用超出了在以太坊混音中部署智能合约的限制的详细内容,此外,我们还将为您介绍关于Eth部署智能合约、geth编译部署智能合约、Golang以太坊:区

此处将为大家介绍关于错误创建MyToken错误:基本费用超出了在以太坊混音中部署智能合约的限制的详细内容,此外,我们还将为您介绍关于Eth 部署智能合约、geth 编译部署智能合约、Golang以太坊:区块链智能合约的新生力量、Haskell开发以太坊智能合约的有用信息。

本文目录一览:

错误创建MyToken错误:基本费用超出了在以太坊混音中部署智能合约的限制

错误创建MyToken错误:基本费用超出了在以太坊混音中部署智能合约的限制

如何解决错误创建MyToken错误:基本费用超出了在以太坊混音中部署智能合约的限制?

我目前正在上有关区块链理事会的课程。我在remix.ethereum.org网站上创建了一个智能合约文件。但是,在部署合同时,我收到一个错误消息:“创建MyToken错误:基本费用超出了汽油限额”。我是这种编程语言的新手,我不知道要解决此问题。来自区块链委员会的优秀人士不愿提供任何支持。有人可以帮我这个忙吗? 请在下面编译的智能合约代码中找到它,但是在尝试部署智能合约时出错。

pragma solidity ^0.5.10;

contract MyToken{
    mapping (address => uint256) private _balances;
    mapping(address => mapping(address=>uint256)) private _allowances;
    
    string private _name;
    string private _symbol;
    uint256 private _decimals;
    uint256 private _totalSupply;
    
    event Transfer(address indexed from,address indexed to,uint256 value);
    event Approval(address indexed owner,address indexed spender,uint256 value);
    
    constructor(uint256 initialSupply,string memory tokenName,string memory tokenSymbol,uint8 decimalUnits) public{
        _balances[msg.sender] = initialSupply;
        _name = tokenName;
        _totalSupply = initialSupply;
        _symbol = tokenSymbol;
        _decimals = decimalUnits;
    
    }
    
    function name() public view returns (string memory){
        return _name;
    }
    
    function symbol() public view returns (string memory){
        return _symbol;
    }
    
    function decimals() public view returns (uint256){
        return _decimals;
    }
    
    function totalsupply() public view returns (uint256){
        return _totalSupply;
    }
    
    function setTotalSupply(uint256 totalSupply) internal {
        _totalSupply = totalSupply;
    }
    
    function balanceOf(address account) public view returns (uint256){
        return _balances[account];
    }
    
    function setBalance(address account,uint256 balance) internal {
        _balances[account] = balance;
    }
    
    function transfer(address beneficiary,uint256 amount) public returns (bool) {
        require(beneficiary != address(0),"Benficiary address cannot be zero" );
        require(_balances[msg.sender] >= amount,"sender does not have enough balance");
        require(_balances[beneficiary] + amount > _balances[beneficiary],"addition overflow" );
        _balances[msg.sender] -= amount;
        _balances[beneficiary] += amount;
        emit Transfer(msg.sender,beneficiary,amount);
        return true;
    }
    
    function approve(address spender,uint256 amount) public returns(bool success){
        require(spender != address(0),"Spender address cannot be zero");
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender,spender,amount);
        return true;
    }
    
    function transferFrom(address sender,address beneficiary,uint256 amount) public returns (bool){
        require(sender != address(0),"Sender cannot be zero");
        require(beneficiary != address(0),"beneficiary cannot be zero");
        require(amount <= _allowances[sender][msg.sender],"Allowances is not enough");
        require(_balances[sender] >= amount,"Sender does not have enough balance");
        require(_balances[beneficiary] + amount > _balances[beneficiary],"Addition overflow");
        
        _balances[sender] -= amount;
        _allowances[sender][msg.sender] -= amount;
        _balances[beneficiary] += amount;
        emit Transfer(sender,amount);
        return true;
        
    }
    
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Eth 部署智能合约

Eth 部署智能合约

首先要开发以太坊的智能合约,需要EVM(以太坊虚拟机),也就是需要运行的环境,我们可以通过 geth 来设置开发环境:

geth --datadir testNet --dev console 2>> test.log

命令参数说明(更多命令详解可阅读Geth命令用法-参数详解篇):
–dev 启用开发者网络(模式),开发者网络会使用POA共识,默认预分配一个开发者账户并且会自动开启挖矿。
–datadir 后面的参数是区块数据及秘钥存放目录。
第一次输入命令后,它会放在当前目录下新建一个testNet目录来存放数据。
console 进入控制台
2>> test.log 表示把控制台日志输出到test.log文件

然后就进入了以太坊客户端 console 界面。

在 console 里,你可以通过相关命令来建立账户、挖矿、转账、查看区块高度等。

接着,建立智能合约:

pragma solidity >=0.4.22 <0.6.0;
contract man {
    string word;
    
    constructor(string memory s) public {
        word = s;
    }
    
    function say() public view returns (string memory) {
        return word;
    }
}

可以在 remix (在线 solidity 编译器)编译你的代码

 

选择编译器版本,然后编译,再点击 detail ,弹出详细信息,

var s = "hello";
var manContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"s","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]);
var man = manContract.new(
   s,
   {
     from: web3.eth.accounts[2], 
     data: ''0x608060405234801561001057600080fd5b506040516102ce3803806102ce8339810180604052602081101561003357600080fd5b81019080805164010000000081111561004b57600080fd5b8201602081018481111561005e57600080fd5b815164010000000081118282018710171561007857600080fd5b505080519093506100929250600091506020840190610099565b5050610134565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100da57805160ff1916838001178555610107565b82800160010185558215610107579182015b828111156101075782518255916020019190600101906100ec565b50610113929150610117565b5090565b61013191905b80821115610113576000815560010161011d565b90565b61018b806101436000396000f3fe608060405234801561001057600080fd5b5060043610610047577c01000000000000000000000000000000000000000000000000000000006000350463954ab4b2811461004c575b600080fd5b6100546100c9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561008e578181015183820152602001610076565b50505050905090810190601f1680156100bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156101555780601f1061012a57610100808354040283529160200191610155565b820191906000526020600020905b81548152906001019060200180831161013857829003601f168201915b505050505090509056fea165627a7a723058200ed7e0241815237b5376e1b879e7461322ec6e49ab75cf7474fc8e8547b1c8bc0029'', 
     gas: ''4700000''
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== ''undefined'') {
         console.log(''Contract mined! address: '' + contract.address + '' transactionHash: '' + contract.transactionHash);
    }
 })

 

将文本复制起来,修改其中的变量,from 地址等,然后在 geth console 中输入,则部署成功

运行合约,发现error

解决方式:

eth.defaultAccount=eth.coinbase

最后得到正确结果:

geth 编译部署智能合约

geth 编译部署智能合约

1、安装 solc,Ubuntu 16.04 下

sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc

装完之后执行 wheris solc 会返回 solc 的可执行文件路径 /usr/bin/solc

2、添加编译器

1、启动 geth, 命令如下,楼主把参数换成你自己的

geth  --identity "newEth" --rpc --rpccorsdomain "*" --datadir "cdata" --port 30303 --rpcapi "personal,db,eth,net,web3" --networkid 999  --rpcport 8080  console

2、添加编译器

> admin.setSolc("/usr/bin/solc")
"solc, the solidity compiler commandline interface\nVersion: 0.4.10+commit.f0d539ae.Linux.g++\n"
> eth.getCompilers()
["Solidity"]

3、编译合约代码

> source="contract test { function multiply(uint a) returns(uint d) { return a * 7; }}"
"contract test { function multiply(uint a) returns(uint d) { return a * 7; }}"
> contractCompiled = eth.compile.solidity(source)
{
  <stdin>:test: {
    code: "0x60606040523415600b57fe5b5b60788061001a6000396000f300606060405263ffffffff60e060020a600035041663c6888fa181146020575bfe5b3415602757fe5b60306004356042565b60408051918252519081900360200190f35b600781025b9190505600a165627a7a72305820e5878550146c3d0f5d5030fd4b2b033475091b9eabea79f5026d14bc0d103db60029",
    info: {
      abiDefinition: [{...}],
      compilerOptions: "--combined-json bin,abi,userdoc,devdoc --add-std --optimize",
      compilerVersion: "0.4.10",
      developerDoc: {
        methods: {}
      },
      language: "Solidity",
      languageVersion: "0.4.10",
      source: "contract test { function multiply(uint a) returns(uint d) { return a * 7; }}",
      userDoc: {
        methods: {}
      }
    }
  }
}

4、部署合约

很多人都是按照类似官方文档 类似的步骤,所以卡在这一步。部署合约最重要的是拿到合约编译后的字节码abi, 对此不清楚的可以看社区其它的帖

> code=contractCompiled["<stdin>:test"].code
"0x60606040523415600b57fe5b5b60788061001a6000396000f300606060405263ffffffff60e060020a600035041663c6888fa181146020575bfe5b3415602757fe5b60306004356042565b60408051918252519081900360200190f35b600781025b9190505600a165627a7a72305820e5878550146c3d0f5d5030fd4b2b033475091b9eabea79f5026d14bc0d103db60029"
>
> abi=contractCompiled["<stdin>:test"].info.abiDefinition
[{
    constant: false,
    inputs: [{
        name: "a",
        type: "uint256"
    }],
    name: "multiply",
    outputs: [{
        name: "d",
        type: "uint256"
    }],
    payable: false,
    type: "function"
}]
>
> var contract=eth.contract(abi)
undefined
> personal.unlockAccount(eth.accounts[0])
Unlock account 0xa122277be213f56221b6140998c03d860a60e1f8
Passphrase:    // 此处输入密码,解锁账户
> var contractInstance=contract.new({from:eth.accounts[0], data:code, gas:300000})
I0401 08:15:43.260996 internal/ethapi/api.go:1141] Tx(0x2bb5b5a407bf4885a90dbd9d3b44b00b32ee64c3cbd1c9c1d5bee40cc3b0d95f) created: 0x3f915fa924f4ab4e25feda28f147fd483e29ea77
undefined

然后开启挖矿 miner.start() , 等待打包(部署合约是一笔交易)后,合约就成功部署到了私有链上,来查看一下

> contractInstance
{
  abi: [{
      constant: false,
      inputs: [{...}],
      name: "multiply",
      outputs: [{...}],
      payable: false,
      type: "function"
  }],
  address: "0x3f915fa924f4ab4e25feda28f147fd483e29ea77",
  transactionHash: "0x2bb5b5a407bf4885a90dbd9d3b44b00b32ee64c3cbd1c9c1d5bee40cc3b0d95f",
  allEvents: function(),
  multiply: function()
}

可以看到,上面的 address 即合约账户的地址 细心的同学可能发现,上面在获取合约类 contractcontractInstance 的时候,我使用了 var 关键字,然后出现了 undefined,很多同学在 QQ 群里问,其实这并不是错误,只是 JS 中两种不同的定义变量的方法,有兴趣的同学可以 google it, 但是在这里有没有 var 关键字并不影响

5、调用合约方法

上述演示的合约代码沿用的是楼主的,其实并不好,因为它并不会修改合约的状态变量,直接 call 操作即可,而不用发起一笔交易。关于调用合约方法的三种方式 请戳这里

> contractInstance.multiply.call(6)

Golang以太坊:区块链智能合约的新生力量

Golang以太坊:区块链智能合约的新生力量

随着区块链技术的不断发展,越来越多的开发者们加入到区块链生态系统中来。其中,golang以太坊作为区块链智能合约的新生力量,吸引了越来越多的关注。本文将从以下几个角度,详细介绍golang以太坊的优势和应用场景。

Golang以太坊简介

Golang以太坊是一种基于Go语言的以太坊客户端,它使用Go语言的强大和灵活进行智能合约的编写和开发。该客户端可以实现以太坊核心协议的不同功能,并提供很多智能合约的开发、部署和执行工具。与其他语言例如JavaScript和Solidity相比,Golang以太坊更具备高效性和安全性。

Golang以太坊的优势

相对于其他以太坊客户端,Golang以太坊作为一种基于Go语言的客户端,其最大的优点就是高效性和安全性。Go语言本身就是一种高效、快速、可靠的编程语言。同时,Golang以太坊使用的集成开发环境(IDE)和调试器也十分方便。

立即学习“go语言免费学习笔记(深入)”;

Golang以太坊的应用场景

自从Golang以太坊发布以来,这种基于Go语言的以太坊客户端已经被广泛应用于区块链行业。以下是几个Golang以太坊的应用场景:

  1. 智能合约开发:Golang以太坊拥有高效、安全的编写模式,使得开发者可以更快更安全地构建区块链上的智能合约。与其他语言相比,Golang以太坊的开发速度更快,同时也具有更好的安全性。
  2. 区块链节点开发:众所周知,以太坊网络是由众多节点构成的分布式网络。因此,节点是区块链生态系统中关键的基础设施。Golang以太坊提供了一种高效、高性能的节点开发模式,使得开发者可以更快更好地构建分布式网络。
  3. 以太坊协议开发:Golang以太坊可以实现以太坊核心协议的不同功能,并提供很多智能合约的开发、部署和执行工具。

结语

总的来说,Golang以太坊是一种高效、安全的以太坊客户端,并且被广泛应用于智能合约开发、节点开发、以太坊协议开发等领域。对于开发者来说,学习Golang以太坊相关技术将有助于提高开发效率并更好地构建区块链场景。

以上就是Golang以太坊:区块链智能合约的新生力量的详细内容,更多请关注php中文网其它相关文章!

Haskell开发以太坊智能合约

Haskell开发以太坊智能合约

ethereumH,这个程序包提供了写在Haskell上的工具,能使你连接到以太坊区块链。

链接:

Github: https://github.com/blockapps/ethereumH

BlockApps: http://www.blockapps.net/

如果你希望高效的学习以太坊DApp开发,可以访问汇智网提供的最热门在线互动教程:

  • 适合区块链新手的以太坊DApp实战入门教程
  • 区块链+IPFS+Node.js+MongoDB+Express去中心化以太坊电商应用开发实战

其他更多内容也可以访问这个以太坊博客。

关于错误创建MyToken错误:基本费用超出了在以太坊混音中部署智能合约的限制的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Eth 部署智能合约、geth 编译部署智能合约、Golang以太坊:区块链智能合约的新生力量、Haskell开发以太坊智能合约等相关知识的信息别忘了在本站进行查找喔。

本文标签: