第19讲 | 上手搭建一条自己的智能合约
陈浩

该思维导图由 AI 生成,仅供参考
上一篇我们聊到了区块链智能合约,我主要介绍了智能合约的概念,但是并没有给你提供智能合约的实际运行案例,那么今天,我们就自己动手写一个智能合约,并且介绍一下智能合约标准模板,供你参考学习, 并搭建起自己的智能合约。
本篇将以以太坊作为基础知识进行讲解,本篇面向没有任何智能合约基础的人群,所以配备了较多的插图和操作命令,如果你正在收听音频,可以点击文稿查看,希望读完这篇文章可以帮助你快速入门智能合约。
搭建一条智能合约
在实际操作智能合约之前,我们首先回顾一下以太坊,以太坊又称以太坊钱包。以太坊钱包提供了包括账户管理,以太坊转账、Dapp 部署与使用在内的一些常规功能。
以太坊社区提供了多种语言实现的客户端和开发库,多数客户端支持 JSON-RPC2.0 标准,目前支持的客户版本有 Go-ethereum(Go 语言)、Parity(Rust 语言)、Cpp-ethereum(C++ 语言)、Ethereum-lib(Javascript)、EthererumJ(Java 语言)、Pyethapp(Python 语言),基本涵盖了主流编程语言。

图片来自以太坊官方文档
官方推荐使用的版本是 Go-ethererum,这是 Go 语言实现的版本,又称 Geth 客户端。
需要提醒你的是,这里客户端的实现语言并不是要求用户熟悉相应的编程语言,这里的用户是指 Dapp 开发者,比如在操作 Geth 客户端的时候,用户其实并不需要了解 Go 语言。
1. 下载与安装 Geth
本文使用 Geth 来进行测试,首先我们要获取 Geth 客户端,如果用户使用的是 Ubuntu 环境的话,可以直接从 PPA 安装。
安装成功后,我们可以查看 Geth 的版本。

表示我们已经安装成功,当然你可以也可以编译安装,由于篇幅有限,你可以另寻资料进行尝试。
2. 搭建以太坊私链
如果在以太坊的主网上运行和开发测试智能合约,这是不明智的,因为会消耗真实的以太币,不过我们可以使用 Geth 搭建一条属于自己的以太坊区块链,也就是以太坊私链。
怎么搭建呢?其实很简单,只需要修改配置文件和一些运行参数即可。
然后执行:
这样,我们就初始化了属于自己的创世区块信息。
接下来我们创建一个账户,由于是用户私链挖矿,只有你一个人挖矿,所以使用 CPU 挖矿完全没有问题。
我们通过如下命令进入 Geth 命令行交互页面:

如上图所示的那样,运行通过。
我们创建了一个新账户,这个账户就是 EOA 账户,并通过 eth.getBalance 获取了当前地址的余额,显示为 0。
输入 Exit 退出后,我们开始以挖矿模式启动,这里我们最好记录一下我们的地址:
【0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab】
我们使用如下命令启动挖矿,注意在 Etherbase 的地方填上述地址:
以太坊的 PoW 挖矿算法是内存困难型的,首先需要生成 DAG,这个视你设备的性能而定,需要耗费一定时间,请耐心等待,如下图所示,我们可以看到 DAG 生成非常耗费时间。

在我的远程开发机上一共耗费了 6 分半,又经过了 4 分钟,我挖到了第一个块,如下图所示。

这期间机器的负载如下。

可以看到 CPU 和内存占用很高,我这里使用测试的机器是 2Core 4GB Ubuntu16.04。
现在我们再去检查一下 Etherbase 所指向地址的余额。

可以看到已经有 5 个以太币了,以太币的最小单位 wei,所以 5 后面 18 个零表示 5 个以太币。
3. 编写并部署属于自己的智能合约
智能合约的开发与钱包是独立的,用户可以使用 IDE 进行调试等操作,目前 Dapp 的 IDE 并不多,常见有 Truffle、Embark、Remix 几种;
这篇文章中,我并不使用 IDE,这里仅仅会给出一些示例代码,即经典的 Hello Word,你如果想尝试编写自己的智能合约,可以使用在线 IDE。
首先我们要获取 Solidity 编译器,通过 apt-get install solc 来安装。
安装成功后,我们新建一个 Solidity 源码文件,命名为 helloword.sol,并且写入代码如下。
执行 solc --bin helloword.sol 获得 EVM 二进制码。

编译器警告我们暂时不必理会,接下来我们还需要生成 ABI 部署参数,使用命令 solc --abi helloword.sol。

开始部署,我们进入 console,
定义 code 和 abi 两个变量如下,注意 code 的值最前面有 0x,二进制数据是用十六进制表示的。
你可以在控制台分别执行,由于结果比较长,这里就不放出来了。
最终执行结果如下。

我们可以通过 txpool 来查看未确认的交易。

接下来只要等待出块即可,你的合约就会成为正常运行的合约了,否则合约还不可以调用。
由于我本地挖矿出块异常缓慢,所以我尝试了 Remix IDE,运行后我们可以得到如下结果。

至此一个简单的 HelloWord 智能合约就生成啦,不过它的运行成本非常高昂,所以我们极力建议使用在一些方便的虚拟环境中。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结

以太坊智能合约标准模板及搭建私链教程 文章介绍了以太坊智能合约标准模板及搭建私链的方法。首先,介绍了以太坊上的三种智能合约标准模板,包括ERC20、ERC223和ERC721,分别针对数字货币和Token的概念,以及它们在以太坊上的应用。其次,详细讲解了如何使用以太坊钱包搭建私链的步骤,包括以太坊钱包的基本功能、以太坊客户端版本、下载和安装Geth客户端、修改配置文件和运行参数等操作。接着,介绍了编写和部署智能合约的流程,包括获取Solidity编译器、编写智能合约代码、生成EVM二进制码和ABI部署参数,以及部署合约并进行解锁账户等操作。最后,提到了使用Remix IDE来运行智能合约的方法。 总的来说,本文通过实际操作手把手地教读者搭建自己的智能合约,适合没有智能合约基础的人群快速入门。同时,通过介绍以太坊上的智能合约标准模板,为读者提供了更多了解以太坊智能合约的知识。 值得一提的是,文章还提到了ERC20、ERC223和ERC721这三种智能合约标准模板的特点和应用场景,为读者提供了更多选择合适模板的参考。对于想要了解以太坊智能合约标准模板及搭建私链的读者来说,本文提供了全面而实用的指导和信息。 通过本文,读者可以快速了解以太坊智能合约标准模板及搭建私链的基本知识和操作方法,为进一步深入学习和实践打下良好的基础。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出区块链》,新⼈⾸单¥59
《深入浅出区块链》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(17)
- 最新
- 精选
- Jason以太坊一般都搭建在Ubuntu上哪?其他Linux可以不?另外想写一个智能合约,用C++可以嘛,部署上有没有什么需要注意的地方?谢谢!
作者回复: 当然可以,你需要从以太坊官网下载对应的版本。 需要用solidty哦,不可以用C++。EOS上你可以用C++
2018-07-24 - 神盾局局长truffle不是solidity的一个框架吗?
作者回复: 啊,不好意思,我更正一下,感谢纠正。
2018-05-25 - 一单成名老师,能在windows下做这个智能合约的开发么?
作者回复: 你好,当然可以的,参考metamask
2018-05-24 - 沃野阡陌私链上挖的以太币是真的Ether吗?还是demo的没有价值的币?
作者回复: 是后者
2018-05-17 - 未来十年这个配置文件的使用的时候是有问题的,主要是年代有点久远了。参数与配置都有变化,我把我运行成功的参数提供给大家,部分内容优化于其他同学。 1. 下载与安装 Geth # apt-get install software-properties-common # add-apt-repository -y ppa:ethereum/ethereum # apt-get update # apt-get install ethereum 2. 搭建以太坊私链 参数: { "config": { "chainId": 666, "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5ddf8f3e", "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x47b760", "difficulty": "0x00002", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "alloc": { }, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" } $ geth --datadir /root/geth-test/ init genesis.json Geth 命令行交互页面: $ geth --datadir /root/geth-test/ --networkid 98 console 运行: personal.newAccount() Etherbase 的地方填上述地址: geth --datadir geth-test --networkid 98 console --mine --miner.threads=1 --miner.etherbase=0xa8bad128cee139a7279b41e23fd0064eccf71efb2021-10-1218
- Geek_JasonFun按步骤进行了一遍操作,觉得还是要有实际动手才会更解,尤其对我们这种软件工程师出身的人来说,不过还是遇到了一些问题,这些步骤估计也是由于时间原因,有些配置需要更新了2019-12-243
- Crystal在执行该操作后 $ geth --datadir /root/geth-test/ --networkid 98 console 存在目标页面,但有不同,请问老师,这个该怎么处理呢? 还存在下面的信息: INFO [05-13|20:38:52.360] Looking for peers peercount=0 tried=41 static=02021-05-131
- sun留白安装执行.json文件的时候,报错这个 Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"。老师能解释一下吗?2020-02-201
- 杨家荣极客时间第二期 21天打卡行动 17/21 <<深入浅出区块链19>>上手搭建一条自己的智能合约 今日所学: 1. 下载与安装 Geth # apt-get install software-properties-common # add-apt-repository -y ppa:ethereum/ethereum # apt-get update # apt-get install ethereum 2. 搭建以太坊私链 参数: { "config": { "chainId": 98, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "difficulty": "200000000", "gasLimit": "2100000", "alloc": { "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" }, "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" } } } $ geth --datadir /root/geth-test/ init genesis.json Geth 命令行交互页面: $ geth --datadir /root/geth-test/ --networkid 98 console 运行: personal.newAccount() Etherbase 的地方填上述地址: $ geth --datadir /root/geth-test/ --networkid 98 --mine --minerthreads=1 --etherbase=0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab 3. 编写并部署属于自己的智能合约 4,目前最广泛使用的三种 Token 标准都是基于以太坊的,它们分别是 ERC20、ERC223、ERC721。 5,以太坊养猫游戏2020-01-221
- L。__部署私链后,你获取了5个Ether, 这个5个Ether 是挖矿获得,我想知道 挖的是谁的?不是私链吗?2022-09-28归属地:北京
收起评论