• 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

    最后得到正确结果:

  • 相关阅读:
    Fluent NHibernate之旅
    IOC之Unity
    使用AutoMapper实现Dto和Model之间自由转换
    javamail邮件发送
    webservice整合spring cxf
    spring 集成mongo配置
    mongodb安装 win7版
    freemarker之list和map
    servlet生命周期
    ArrayList和LinkedList和Vector源码分析
  • 原文地址:https://www.cnblogs.com/linguoguo/p/10165495.html
Copyright © 2020-2023  润新知