首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >智能合约:介绍、geth、Ethereum Wallet

智能合约:介绍、geth、Ethereum Wallet

作者头像
yichen
发布于 2020-05-04 07:13:49
发布于 2020-05-04 07:13:49
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

从看雪论坛换了一本《智能合约安全分析和审计指南》,看了一些智能合约相关的内容,因为我之前对于区块链的了解仅仅是只知道世界上有一种叫做比特币的东西,所以对于这些概念的理解还是比较困难的

了解一下区块链是什么东西:

https://ethfans.org/posts/wtf-is-the-blockchain

了解一下以太坊以及智能合约等:

https://ethfans.org/posts/gentle-introduction-ethereum-new-version-with-more-note

geth的操作及相关说明

geth 安装的话,下载直接安装就好了

这里提供一个曲奇云盘的链接:

https://quqi.com/s/3109432/69adjDfUW6UFX5cU

安装好以后在文件目录下打开cmd操作

连接至网络

使用这条命令主网

geth --datadir ./ethdev/chain --networkid 1

搭建私有链

把之前生成的那个 chaindata 删掉,然后在 ethdev 目录下创建一个 genesis.json

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"config":{    "chainId":2,    "homesteadBlock":0,    "eip150Block":0,    "eip155Block":0,    "eip158Block":0    },    "coinbase":"0x0000000000000000000000000000000000000000",    "difficulty":"0x40000",    "extraDate":"",    "gasLimit":"0xffffffff",    "nonce":"0x0000000000000042",    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",    "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",    "timestamp":"0x00",    "alloc":{}}

然后使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
geth init ./ethdev/genesis.json --datadir ./ethdev/chain

生成创世块,现在网络就部署好了,但是还没有区块和账户

运行命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
geth --datadir ./ethdev/chain/00 --nodiscover console 2>>./ethdev/chain/00/eth_output.log

实际上上面这条命令的完整形式是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
geth --identity chainpi --rpc --rpcport 8080 --rpccorsdomain "*" --datadir ./ethdev/chain/00/ --port 30303 --nodiscover --rpcapi "db,eth,net,web3" --networkid 555 console 2>>./ethdev/chain/00/eth_output.log --allow-insecure-unlock

参数介绍:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--identity    给以太坊节点设置身份--rpc         启动 RPC(Remote Procedure Call,远程过程调用)通信,进行智能合约的部署和调试。不同的 RPC 设置,可以供 API 及远程访问他们的人使用--datadir     与初始化测试使用同一目录--port        网络监听端口,设置端口是为了防止在多条链之间发生端口冲突--nodiscover  表示该节点对外不可见--networkid   是一个数字,表示设置当前区块链的网络 ID,以区分不同的网络,第一次可以随意设置,但之后如果要链接同一条链,需要去取对应的 networkid(主网 ID1,主网的测试网络 ID2--rpcapi "db,eth,net,web3"   这条命令主要是描述哪些接口可以通过 RPC 来访问,在默认情况下,geth 开启的是 web3 接口--dev       启用开发者网络(模式)开发者模式会使用 POA 共识,默认预分配一个开发者账户,并会自动开启挖矿--allow-insecure-unlock   是新版的 geth 禁用了 HTTP 通道解锁账户,加上这个东西就可以 unlock 了

控制台是一个交互的 javascript 执行环境,这个环境内置了一些用于操作以太坊的 JavaScript 对象

常见操作

eth.accounts 查看现有账户

personal.newAccount() 创建账户,括号里面可以填写密码,第一个创建的账户用户名默认 coinbase

账户数据保存在区块目录下的 keystore 文件夹里面

eth.coinbase(好像返回的是 hash)

eth.getBalance(eth.coinbase) 查看 coinbase 账户的余额

miner.start() 开始挖矿,挖到的以太币归默认 eth.accounts[0] 即 coinbase 所有,在测试网络里面,把 genesis.json 中的 difficulty 的值设置的小一点会更容易挖到以太币

eth.blockNumber 查看当前区块数(一开始显示为零,等会就有了)

miner.stop() 停止挖矿

eth.getBalance(eth.coinbase) 查看 coinbase 当前的余额

web3.fromWei(eth.getBalance(eth.coinbase),"ether") 以以太币的形式显示余额

u0=eth.coinbase 重命名账户

下面我们在创建几个账户,来试一下转账

personal.newAccount()

personal.newAccount()

u1=eth.accounts[1]

u2=eth.accounts[2]

开始交易

从 u0 转 100 个以太币给 u1,报错了,原因是 coinbase 未解锁

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eth.sendTransaction({from:u0,to:u1,value:web3.toWei(100,'ether')})
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
personal.unlockAccount(u0,'123456')

解锁 u0 后面跟的 123456 是密码,解锁后就交易成功了

再给 u2 转 100 个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eth.sendTransaction({from:u0,to:u2,value:web3.toWei(100,'ether')})

交易完成之后并没有变化,使用 txpool.status 看一下

pending 为 2 表示有两笔交易已经提交,但未被处理,因为刚刚的交易还没有被写进区块,而将交易写进区块的办法是挖矿⛏

我们可以通过交易的散列值来查看之前达成的一笔交易

看一下对应的区块 eth.getBlock(209)

账户与密钥

账户在以太坊中扮演着重要的角色,以太坊有两种账户类型,分别是外部账户和合约账户。在这里,外部账户简称为账户,合约账户简称为合约,外部账户和合约账户都是账户的通用概念,这些账户其实都是状态对象

外部账户的余额,就是外部账户的一个状态对象;合约账户的状态,除了余额,还有存储合约。所有账户的状态都是以太坊网络的状态,以太坊网络的状态随着每一个区块的更新而变化

如果对以太坊网络加以限制,使其中只有外部账户且这些账户只能进行交易,就相当于生成了一种只能交易以太币的“山寨币”

账户是使用者对外的身份。在使用公钥对一笔交易进行签名后,以太坊虚拟机就可以安全地对这笔交易的发起者进行身份验证

每个账户都对应一对密钥,一个私玥和一个公玥

账户和地址是一一对应的,账户索引来自密钥的最后20字节

每一个私钥-地址都被编码到一个与密钥文件里面,密钥文件大小是一个 JSON 格式的文本文件

密钥文件的重要组成部分,即账户的私钥,是通过创建账户时输入的密码加密保护的

密钥文件存储在以太坊客户端的 keystore 的目录中,要定期备份

搭建私有链多节点

net 查看网络状态

net. 然后 tab 键有命令补全提示

net.listening 查看网络是否处于监听状态

net.peerCount 查看已连接的结点的数量

admin 查看网络

admin. 查看 admin 可以进行哪些操作

书上不详细,差评,参考:

https://blog.csdn.net/hantangduhey/article/details/81017602

新开一个节点,这里我又设置了一下,把这些节点移动到了 chain 下面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
geth init ./ethdev/genesis.json --datadir ./ethdev/chain/01

进入另一个的控制台:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
geth --identity chainpi --rpc --rpcport 8081 --rpccorsdomain "*" --datadir ./ethdev/chain/01 --port 30304 --nodiscover --rpcapi "db,eth,net,web3" --networkid 555 console 2>>./ethdev/chain/01/eth_output.log --allow-insecure-unlock --ipcdisable

win 下面好像不加后面的参数 --ipcdisable 不能多开 geth

进入另一个节点一的控制台(就是之前一直用的那个控制台)运行如下命令,与节点二连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
admin.addPeer("enode://928acba0da90d952b3802f7ddab2a99d29164934c407b56f8c47ed52d44e843314457a40e9ff1dd5d2da632b5be6f8d346fddac35b9f2755650a17ed78a2e139@127.0.0.1:30304")

连接成功之后,节点二就会开始同步节点一的区块。同步完成之后只要任意节点开始挖矿,另一节点就会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该交易的信息,书上说的,我这里不会显示

使用 net.peerCount 可以看一下已连接的节点数

当然,除了在控制台用命令添加,也可以在 --datadir 指定的目录里面添加 static-nodes.json 文件,让各个节点取得联系,具体如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{    "enode://xxxxxxxx"     //boot node 的地址}

抄书了

Ethereum Wallet

Ethereum Wallet 软件去这里下载:

https://github.com/ethereum/mist/releases

我新版打不开,老的版本可以,曲奇云盘:

https://quqi.com/s/3109432/mlDb0HRmwRSGL871

下下来直接解压出来:先 cmd 中启动节点,然后再打开这个

第一次运行要等一阵,我去吃了个饭,也不知道要具体等多长时间,弹这个下载的框直接关掉就行

然后就这样了

出现这个的时候,点运行就可以

主界面!

实现多重签名

多重签名是指需要多个人同意,交易才能生效。好处是当要从账户里提取较大额度的以太币时,需要多个账户共同认证才能成功提取,因此创建一个多重签名的钱包需要至少创建两个账户

另外,要想主账户添加不少于 0.02 个以太币(用于创建多重签名钱包的账户),这是创建多重签名钱包合约的交易费用,另外至少需要 1 个以太币,因为当前 Mist 需要足够的 gas 来确保多重签名合约能够正确地执行交易,所以一开始主账户里面至少要有 1.02 个以太币

随便点一个

选择右边的 copy address

把那俩的地址都保存出来:

0xE2fA80E6D74b9f63157EcD131Eb11F8130D0416D

0x27EdE661c026b64DdEF9d9D965d710af40afaea0

点击 Wallet Contracts

设置一下

然后创建

然后可以自己设置一下最高交易费用,输入密码就可以了

只有在挖矿状态下才能将合约打包到区块中

使用我们自己的账户,给刚才创建的钱包转个帐

如果转账的金币不够的话就会有提示

正常的话就正常转账

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈冠男的游戏人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【操作系统不挂科】操作系统期末考试题库(单选题&简答题&计算与分析题&应用题)
A. 用户编写的一个子程序 B. 高级语言中的库程序 C. 操作系统中的一条命令 D. 操作系统向用户程序ᨀ供的接口
YY的秘密代码小屋
2025/01/05
6540
【操作系统不挂科】操作系统期末考试题库(单选题&简答题&计算与分析题&应用题)
操作系统精髓与设计原理--IO管理和磁盘调度
IO体系结构是计算机系统和外部的接口,同时也是操作系统中设计最难的部分,因为存在许多不同的设备和它们的应用,难有统一一致的解决方案。 IO体系结构的设计目标是提供一种系统化方法来控制与外部的交互,并且给操作系统提供有效管理IO所需的信息。
学徒漠筱歌
2022/07/17
2.9K0
操作系统精髓与设计原理--IO管理和磁盘调度
【操作系统不挂科】操作系统期末考试卷<3>(单选题&简答题&计算与分析题&应用题)
A. 在实时系统中并发运行多个程序 B. 在分布系统中同一时刻运行多个程序 C. 在一台处理机上同一时刻运行多个程序 D. 在一台处理机上并发运行多个程序
YY的秘密代码小屋
2025/01/07
2340
【操作系统不挂科】操作系统期末考试卷<3>(单选题&简答题&计算与分析题&应用题)
【操作系统不挂科】操作系统期末考试题库<2>(单选题&简答题&计算与分析题&程序分析题&应用题)
A.管理计算机裸机 B. 设计、提供用户程序与计算机硬件系统的界面 C. 管理计算机系统资源 D. 高级程序设计语言的编译器
YY的秘密代码小屋
2025/01/06
2920
【操作系统不挂科】操作系统期末考试题库<2>(单选题&简答题&计算与分析题&程序分析题&应用题)
操作系统 第六章:输入输出系统
I/O系统的主要任务: 完成用户提出的I/O请求; 提高I/O速率; 提高设备的利用率;为更高层的进程方便地使用这些设备提供手段;
Here_SDUT
2022/08/09
1.4K0
操作系统 第六章:输入输出系统
操作系统生磁盘的使用---18
看了上面的基本过程后,相信大家可以理解了,如果我们要操作磁盘读写的话,就是告诉磁盘控制器关于柱面、磁头、扇区、缓 存位置,然后是读还是写,剩下的由磁盘控制器完成。
大忽悠爱学习
2022/08/23
1K0
操作系统生磁盘的使用---18
[每天五分钟,备战架构师-4]操作系统之设备管理
设备管理是对计算机输入、输出系统的管理,这是操作系统最具有多样性和复杂性的部分,其主要任务是选择合适的设备进行数据传输,控制数据交换的过程,为用户提供透明的接口让用户不必关心设备的特性,为完成这些任务,需要提供的功能主要包括:缓冲区管理、设备分配、设备处理、虚拟设备管理、实现设备独立性等。
大江小浪
2018/07/24
9020
[每天五分钟,备战架构师-4]操作系统之设备管理
操作系统复习——第十二章 大容量存储器结构
一个典型的坏扇区事务处理可能如下: ·操作系统试图访问逻辑块87。 ·控制器计算ECC的值,发现该块是坏的,它将此结果通知操作系统。 ·下次操作系统重启时,可以运行一个特殊程序以告诉SCSI控制器用备用块替代坏块。 ·之后,每当系统试图访问逻辑块87时,这一请求就转换成控制器所替代的扇区的地址。 12.6 交换空间管理 12.7 RAID结构(磁盘冗余阵列) 一个系统拥有了大量磁盘,它就有机会改善数据读写速度(因为磁盘操作可并行进行)。而且,这种设置也使系统有机会改善数据存储的可靠性,因为可在多个磁
种花家的奋斗兔
2020/11/12
1.1K0
操作系统核心原理-6.外存管理(上)磁盘基础
  计算机是处理数据的机器,而数据就需要有地方存放。在计算机中,可供数据存放的地方并不太多,除了内存之外,最主要的存储数据的媒介就是磁盘。对于大多数计算机领域的人来说,磁盘通常被看做是一种外部设备。可是,对于现代操作系统来说,磁盘是不可或缺的。虽然早期的操作系统可以基于磁带,但由于操作系统复杂性和性能的不断提升,用磁带作为操作系统的载体已经不合时宜,取而代之的是磁盘。由于操作系统需要存放在磁盘上,且操作系统内的文件系统也是基于磁盘,所以,从某种程度来说,磁盘是操作系统不可分割的一部分,理解磁盘将对理解操作系统的原理具有重要的意义。
Edison Zhou
2018/08/20
8490
操作系统核心原理-6.外存管理(上)磁盘基础
【操作系统不挂科】<线程概念>选择题&简答题(带答案与解析)
A.引入线程后,处理机只在线程间切换 B. 引入线程后,处理机仍在进程间切换 C. 线程的切换,不会引起进程的切换 D. 线程的切换,可能引起进程的切换
YY的秘密代码小屋
2024/11/17
1850
操作系统实验六
简直可怕,怎么可能写出来磁盘调度算法啊喂!算法实现倒还好说,就是一个排序算法。但是!访问的柱面就是随机生成的所以还要写iterator?!这里简单描述一下各种磁盘调度算法。
Ewdager
2020/07/14
1.1K0
【操作系统不挂科】<内存管理综述(14)>选择题&简答题(带答案与解析)
A.分页式存储管理 B.分段式存储管理 C.固定分区式存储管理 D.段页式存储管理
YY的秘密代码小屋
2024/11/26
2240
[操作系统]磁盘调度算法
一次磁盘读写操作所需要的时间 寻找时间(寻道时间):磁头臂前后移动寻找磁道所需的时间 (系统软件可算法优化) 延迟时间:磁头旋转定位到目标扇区所需要的时间 (固定) 传输时间:读写数据到扇区所需的时间 (固定)
唯一Chat
2021/01/05
1.3K0
[操作系统]磁盘调度算法
软考系统架构设计师(三):操作系统
操作系统是直接控制和管理计算机硬件、软件资源,合理地对各类作业进行调度,以方便用户使用的程序集合。
陈大剩博客
2023/03/22
8280
软考系统架构设计师(三):操作系统
操作系统学习笔记-I/O管理和磁盘调度
控制的复杂性:例如,打印机仅需要一个相对简单的控制接口,而磁盘的控制接口则要复杂得多。
花猪
2022/02/16
1K0
操作系统学习笔记-I/O管理和磁盘调度
【系统架构设计师】计算机组成与体系结构 ⑩ ( 磁盘管理 | 磁盘移臂调度算法 | 先来先服务算法 | 最短寻道时间优先 | 扫描算法 | 循环扫描算法 )
旋转延时 是 硬盘的 盘面 持续保持匀速旋转 实现的 , 这是 硬盘 本身的硬件特性 , 该延时没有规律 ;
韩曙亮
2024/07/09
1K0
【系统架构设计师】计算机组成与体系结构 ⑩ ( 磁盘管理 | 磁盘移臂调度算法 | 先来先服务算法 | 最短寻道时间优先 | 扫描算法 | 循环扫描算法 )
【操作系统不挂科】<内存管理-虚拟内存(17)>选择题&简答题&简答题(带答案与解析)
A.要求作业运行前,必须全部装入内存,且在运行中必须常驻内存 B.要求作业运行前,不必全部装入内存,且在运行中不必全部常驻内存 C.要求作业运行前,不必全部装入内存,但在运行中必须全部常驻内存 D.要求作业运行前,必须全部装入内存,且在运行中不必常驻内存
YY的秘密代码小屋
2024/12/01
3020
【操作系统不挂科】<内存管理-虚拟内存(17)>选择题&简答题&简答题(带答案与解析)
【愚公系列】软考中级-软件设计师 030-操作系统(设备管理)
设备管理是操作系统的一项重要功能,它负责管理计算机系统中的各种硬件设备,包括输入设备、输出设备和存储设备等。设备管理的主要任务包括设备的分配、控制和调度。
愚公搬代码
2024/02/11
2660
肝了很久!一文了解操作系统 I/O
我们之前的文章提到了操作系统的三个抽象,它们分别是进程、地址空间和文件,除此之外,操作系统还要控制所有的 I/O 设备。操作系统必须向设备发送命令,捕捉中断并处理错误。它还应该在设备和操作系统的其余部分之间提供一个简单易用的接口。操作系统如何管理 I/O 是我们接下来的重点。
cxuan
2020/06/28
1.3K0
肝了很久!一文了解操作系统 I/O
【考前完整复习】操作系统计算题与大题
先来先服务算法指的是按照作业/进程到达的先后顺序进行服务的,主要从“公平”的角度考虑。用于作业调度时,考虑的是哪个作业先到达后备队列;用于进程调度时,考虑的是哪个进程先到达就绪队列,是非抢占式算法,不会导致饥饿(某进程/作业长时间得不到服务)
命运之光
2024/03/20
3680
【考前完整复习】操作系统计算题与大题
推荐阅读
【操作系统不挂科】操作系统期末考试题库(单选题&简答题&计算与分析题&应用题)
6540
操作系统精髓与设计原理--IO管理和磁盘调度
2.9K0
【操作系统不挂科】操作系统期末考试卷<3>(单选题&简答题&计算与分析题&应用题)
2340
【操作系统不挂科】操作系统期末考试题库<2>(单选题&简答题&计算与分析题&程序分析题&应用题)
2920
操作系统 第六章:输入输出系统
1.4K0
操作系统生磁盘的使用---18
1K0
[每天五分钟,备战架构师-4]操作系统之设备管理
9020
操作系统复习——第十二章 大容量存储器结构
1.1K0
操作系统核心原理-6.外存管理(上)磁盘基础
8490
【操作系统不挂科】<线程概念>选择题&简答题(带答案与解析)
1850
操作系统实验六
1.1K0
【操作系统不挂科】<内存管理综述(14)>选择题&简答题(带答案与解析)
2240
[操作系统]磁盘调度算法
1.3K0
软考系统架构设计师(三):操作系统
8280
操作系统学习笔记-I/O管理和磁盘调度
1K0
【系统架构设计师】计算机组成与体系结构 ⑩ ( 磁盘管理 | 磁盘移臂调度算法 | 先来先服务算法 | 最短寻道时间优先 | 扫描算法 | 循环扫描算法 )
1K0
【操作系统不挂科】<内存管理-虚拟内存(17)>选择题&简答题&简答题(带答案与解析)
3020
【愚公系列】软考中级-软件设计师 030-操作系统(设备管理)
2660
肝了很久!一文了解操作系统 I/O
1.3K0
【考前完整复习】操作系统计算题与大题
3680
相关推荐
【操作系统不挂科】操作系统期末考试题库(单选题&简答题&计算与分析题&应用题)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档