深入浅出区块链
陈浩
元界 CTO
40685 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
深入浅出区块链
15
15
1.0x
00:00/00:00
登录|注册

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

ERC721
ERC223
ERC20
智能合约标准模板
智能合约部署
以太坊私链
以太坊钱包
以太坊
智能合约
参考文章

该思维导图由 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 安装。
# apt-get install software-properties-common
# add-apt-repository -y ppa:ethereum/ethereum
# apt-get update
# apt-get install ethereum
安装成功后,我们可以查看 Geth 的版本。
表示我们已经安装成功,当然你可以也可以编译安装,由于篇幅有限,你可以另寻资料进行尝试。

2. 搭建以太坊私链

如果在以太坊的主网上运行和开发测试智能合约,这是不明智的,因为会消耗真实的以太币,不过我们可以使用 Geth 搭建一条属于自己的以太坊区块链,也就是以太坊私链。
怎么搭建呢?其实很简单,只需要修改配置文件和一些运行参数即可。
{
"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
这样,我们就初始化了属于自己的创世区块信息。
接下来我们创建一个账户,由于是用户私链挖矿,只有你一个人挖矿,所以使用 CPU 挖矿完全没有问题。
我们通过如下命令进入 Geth 命令行交互页面:
$ geth --datadir /root/geth-test/ --networkid 98 console
如上图所示的那样,运行通过。
personal.newAccount()
我们创建了一个新账户,这个账户就是 EOA 账户,并通过 eth.getBalance 获取了当前地址的余额,显示为 0。
输入 Exit 退出后,我们开始以挖矿模式启动,这里我们最好记录一下我们的地址:
【0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab】
我们使用如下命令启动挖矿,注意在 Etherbase 的地方填上述地址:
$ geth --datadir /root/geth-test/ --networkid 98 --mine --minerthreads=1 --etherbase=0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab
以太坊的 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,并且写入代码如下。
pragma solidity ^0.4.11;
contract helloWorld {
function renderHelloWorld () returns (string) {
return 'helloWorld';
}
}
执行 solc --bin helloword.sol 获得 EVM 二进制码。
编译器警告我们暂时不必理会,接下来我们还需要生成 ABI 部署参数,使用命令 solc --abi helloword.sol。
开始部署,我们进入 console,
定义 code 和 abi 两个变量如下,注意 code 的值最前面有 0x,二进制数据是用十六进制表示的。
>code="0x6060604052341561000f57600080fd5b6101578061001e6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063942ae0a714610046575b600080fd5b341561005157600080fd5b6100596100d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009957808201518184015260208101905061007e565b50505050905090810190601f1680156100c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100dc610117565b6040805190810160405280600a81526020017f68656c6c6f576f726c6400000000000000000000000000000000000000000000815250905090565b6020604051908101604052806000815250905600a165627a7a72305820fcce0b6910e479539e4796b7d56620a6f90e03ba47449c843bec54958f68bf700029"
>abi=[{"constant":false,"inputs":[],"name":"renderHelloWorld","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
你可以在控制台分别执行,由于结果比较长,这里就不放出来了。
// 这一步解锁账户,用于方便部署合约
>personal.unlockAccount("0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab")
// 使用上述定义的abi变量生成合约信息
>myHelloWorld=eth.contract(abi)
// 注入code信息,激活合约
>contract=myHelloWorld.new({from:"0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab",data:code,gas:1000000})
最终执行结果如下。
我们可以通过 txpool 来查看未确认的交易。
接下来只要等待出块即可,你的合约就会成为正常运行的合约了,否则合约还不可以调用。
由于我本地挖矿出块异常缓慢,所以我尝试了 Remix IDE,运行后我们可以得到如下结果。
至此一个简单的 HelloWord 智能合约就生成啦,不过它的运行成本非常高昂,所以我们极力建议使用在一些方便的虚拟环境中。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

以太坊智能合约标准模板及搭建私链教程 文章介绍了以太坊智能合约标准模板及搭建私链的方法。首先,介绍了以太坊上的三种智能合约标准模板,包括ERC20、ERC223和ERC721,分别针对数字货币和Token的概念,以及它们在以太坊上的应用。其次,详细讲解了如何使用以太坊钱包搭建私链的步骤,包括以太坊钱包的基本功能、以太坊客户端版本、下载和安装Geth客户端、修改配置文件和运行参数等操作。接着,介绍了编写和部署智能合约的流程,包括获取Solidity编译器、编写智能合约代码、生成EVM二进制码和ABI部署参数,以及部署合约并进行解锁账户等操作。最后,提到了使用Remix IDE来运行智能合约的方法。 总的来说,本文通过实际操作手把手地教读者搭建自己的智能合约,适合没有智能合约基础的人群快速入门。同时,通过介绍以太坊上的智能合约标准模板,为读者提供了更多了解以太坊智能合约的知识。 值得一提的是,文章还提到了ERC20、ERC223和ERC721这三种智能合约标准模板的特点和应用场景,为读者提供了更多选择合适模板的参考。对于想要了解以太坊智能合约标准模板及搭建私链的读者来说,本文提供了全面而实用的指导和信息。 通过本文,读者可以快速了解以太坊智能合约标准模板及搭建私链的基本知识和操作方法,为进一步深入学习和实践打下良好的基础。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出区块链》
新⼈⾸单¥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=0xa8bad128cee139a7279b41e23fd0064eccf71efb
    2021-10-12
    18
  • Geek_JasonFun
    按步骤进行了一遍操作,觉得还是要有实际动手才会更解,尤其对我们这种软件工程师出身的人来说,不过还是遇到了一些问题,这些步骤估计也是由于时间原因,有些配置需要更新了
    2019-12-24
    3
  • Crystal
    在执行该操作后 $ geth --datadir /root/geth-test/ --networkid 98 console 存在目标页面,但有不同,请问老师,这个该怎么处理呢? 还存在下面的信息: INFO [05-13|20:38:52.360] Looking for peers peercount=0 tried=41 static=0
    2021-05-13
    1
  • sun留白
    安装执行.json文件的时候,报错这个 Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"。老师能解释一下吗?
    2020-02-20
    1
  • 杨家荣
    极客时间第二期 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-22
    1
  • L。__
    部署私链后,你获取了5个Ether, 这个5个Ether 是挖矿获得,我想知道 挖的是谁的?不是私链吗?
    2022-09-28归属地:北京
收起评论
大纲
固定大纲
搭建一条智能合约
1. 下载与安装 Geth
2. 搭建以太坊私链
3. 编写并部署属于自己的智能合约
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部