在Geth私链上发布智能合约

4 篇文章 5 订阅
2 篇文章 0 订阅

前一阵子学习了一些区块链相关,并记录了在在Geth上创建私链的过程。详情请参考如下的几篇文章:

这篇文章简单讲述下如何在Geth上部署和发布智能合约。

智能合约是部署在区块链上的一组预定义的业务规则,具备确定性(Deterministic)执行的特征。换句话说,智能合约只是软件程序,与所有程序一样,它们完全按照程序员的意图执行。与普通的程序不太一样的是,存储在区块链上,并使用加密代码强制执行协议。

智能合约的概念最初是由计算机科学家、密码学家Nick Szabo于1993年构思出来的。在1994年的一篇文章中,Nick写道:“智能合约的总体目标是满足共同的合同条件(例如付款项、留置权、保密性,甚至强制执行),最大限度地减少异常以及对可信中介的需求。 相关的经济目标包括减少欺诈损失、仲裁和执行成本以及其他交易成本。现今存在的一些技术可以被视为粗略的智能合约,例如POS终端和(信用卡)、电子数据交换(EDI)以及公共网络带宽的agoric分配。

尽管智能合约在比特币诞生时才出现一线生机,但以太坊完全接受了它,使得在其分布式账本中执行和存储智能合约成为可能。以太坊的平台专为执行智能合约而设计,使交易和ICO(初始代币发行)成为可能且无可挑剔。在许多方面,智能合约是所有区块链技术的基石。此外,许多新兴的区块链初创公司依赖于智能合约有望创造的革命。

这篇文章主要介绍的是如何在Geth私链上部署和发布智能合约,因此我们这里用的合约是Hello World级别的,这篇文章并不涉及如何编写复杂功能的智能合约。

一、用Solidity语言编写智能合约

pragma solidity ^0.4.26;

contract MyContract {
    function multiply(uint a) public pure returns(uint) {
        return 5 * a;
    }
}

上面的合约代码非常简单,定义了一个函数,接收两个整形参数,函数功能是返回这两个参数的乘积。这里我们不考虑程序的语法,只关注合约部署和发布的过程。如果大家对Solidity语言感兴趣,可以自行去网上搜索相关的文章。下面的链接是Solidity的官方文档地址:

Solidity Language Documentation

二、使用Remix IDE编译智能合约

由于Geth 的新版本取消了eth.compile命令,所以我们这里使用在线工具来完成合约的编译。也可以用solc工具来编译,详细的使用方法可以百度。

在浏览器输入http://remix.ethereum.org,打开Remix IDE,在文件浏览器中新建文件,将上面的合约代码复制进去并保存

 

 

若代码没有自动编译,也可手动进行编译。若有红色错误提示,需要根据提示进行处理。黄色警告可以忽略。

 

 

 点击Compilation Details按钮,会弹出编译的详细信息,其中的ABI和Bytecode,是我们部署合约要用到的。

 

 

点击ABI和Bytecode旁边的复制按钮,分别将它们复制到本地,一会儿会用到。

注意:复制的Bytecode中,我们用到的是JSON对象中的object。同时,复制下来的ABI先要转成JSON字符串,我们可以借助http://www.bejson.com/jsonviewernew/来完成。

 三、部署合约

1、创建并解锁账户

提示:若当前私链上已经有账户,并且该账户有余额,则可以跳过该步骤

 提示:在Windows下转账时,需要先解锁账户。新版本的Geth出于安全考虑,默认禁止了HTTP通道解锁账户,相关issue:https://github.com/ethereum/go-ethereum/pull/17037。要解决此问题,可在启动参数中增加 --allow-insecure-unlock

要确认该账户是否是旷工账户

若不是旷工账号,需要将该账号设置成旷工账号

可以通过挖矿或从其他账号转账使该账户获得余额,以便支付部署费用

2、创建合约对象

 提示:这里需要注意的是,从Remix IDE复制下来的Bytecode,前面要加一个 0x

这里的ABI和Bytecode就是上面复制保留下来的内容。

3、预估手续费

 

 4、部署合约

 

 然后挖矿以便写入区块,稍后可以验证合约是否部署成功。

5、调用合约方法

提示:调用合约方法时若提示 Invalid address,执行如下命令

eth.defaultAccount=eth.coinbase

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值