智能合约部署与调用之 geth命令端

最近在学习区块链相关的东西,需要用到智能合约,所以在此做一些笔记,以此为以后用到了做一些帮助。

经过最近一周的研究,自己各种百度,基于当前的区块链知识的水平,个人把智能合约大体分为以下部署方式

1 智能合约geth 命令端 部署

2 rpc 接口进行部署

3 前端 web3.js基于node环境 进行部署

计划使用三篇文章进行记录。

此篇为 geth 命令端 部署

打开remix编辑 不管是线上还是本地搭建的

  1. 创建 Test.sol
pragma solidity ^0.4.22;

contract Multiply7 {
    
   event  Print(uint);
   
   function multiply(uint a)  public returns(uint d) {
       
       emit Print(a * 7);
       
       return a * 7; 
       
   }
}
  1. 选择对应的版本 version ,编译成功后点击 details,如下图:

在这里插入图片描述

  1. 复制上图中的WEB3DEPLOY

  2. geth attach ipc:对应目录/geth.ipc

    进入命令端:
    eth 查看是否创建过账号并具有对应的eth数量
    # eth.getBalance(eth.accounts[0])
    # miner.start(1)  //没有余额进行挖矿,,有则不用
    # miner.stop()  //经过一段时间挖矿,有一定eth后
    # personal.unlockAccount(eth.accounts[0])   //解锁用户,将用该用户部署智能合约
    # var multiply7Contract = web3.eth.contract([{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"","type":"uint256"}],"name":"Print","type":"event"}]);
    # var multiply7 = multiply7Contract.new(
       {
         from: web3.eth.accounts[0], 
         data: '0x608060405234801561001057600080fd5b5060f58061001f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b348015604f57600080fd5b50606c600480360381019080803590602001909291905050506082565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a723058206ca12caf3900e028861fda3e55ae13df64b1e21df372c79588e6695c7f67b86c0029', 
         gas: '4700000'
       }, function (e, contract){
        console.log(e, contract);
        if (typeof contract.address !== 'undefined') {
             console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
        }
     })
     
    //粘贴刚才图中所示的web3的内容
    //回车  查看日志
    Submitted contract creation              fullhash=0xef836cce365c6bb53c7936da117e333c2498a0ff31e4b5cab5d65511a3310c88 contract=0x41a6e2855829396E1387598CB65aaf76FFA1662d
    //会看到日志中有以上信息,说明智能合约部署了,但是还没有写入区块中
    
    
    # miner.start(1) //进行挖矿,这里是挖矿,把刚才部署的合约写入区块中
    null
    
    # Contract mined! Address: 0x3d21428a20aa5c51e7ab1dfc52c89c2c337924e6   //合约地址
    [object Object]
    
    # eth.getCode('0x3d21428a20aa5c51e7ab1dfc52c89c2c337924e6') //查看是否部署成功
    "0x60806040526004361061005c576000357c010000000000000000000000000000000000000000000000000000000090048063188b85b41461006157806360fe47b1146100b05780636d4ce63c146100eb578063f446c1d014610116575b600080fd5b34801561006d57600080fd5b5061009a6004803603602081101561008457600080fd5b8101908080359060200190929190505050610141565b6040518082815260200191505060405180910390f35b3480156100bc57600080fd5b506100e9600480360360208110156100d357600080fd5b810190808035906020019092919050505061014f565b005b3480156100f757600080fd5b50610100610159565b6040518082815260200191505060405180910390f35b34801561012257600080fd5b5061012b610162565b6040518082815260200191505060405180910390f35b600081600054019050919050565b8060008190555050565b60008054905090565b6000548156fea165627a7a723058203033498bf3661ba9be9645b58fc484ca960635e7cabc7879bda415d4e13094170029"
    # miner.stop()  //通过日志,发现已经挖矿成功
    
    
    
    1. 调用合约方法
    
    
    # contractInstance.multiply.sendTransaction(9, {from:eth.accounts[0], gas:1000000})
    "0x6a2b0d2a5d4175519610e681853e823aa401a0295c10b4be7fb7e2358f8f59d0"
    9
    
    
    

**ps 总节: 通过以上步骤,智能合约已经部署完成了,但是其中定义的实例化对象 contractInstance 在我关闭geth客户端,再一次进入后,无法使用了,智能通过之前记录的abi 进行再次实例化,才能进行智能合约方法的调用 **

abi  就是  上面提到的json数据

# var abi = web3.eth.contract([{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"","type":"uint256"}],"name":"Print","type":"event"}]);
# abi.at("合约地址").get()   //通过这样才能调用刚才部署的合约

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值