主页 > imtoken官网下载1.0版本 > 智能合约:简介、geth、以太坊钱包
智能合约:简介、geth、以太坊钱包
从看学论坛上换了一份《智能合约安全分析与审计指南》以太坊poa出块时间怎么设置,看了一些智能合约相关的内容,因为之前对区块链的理解只是世界上有一种东西叫比特币。 因此,理解这些概念还是有难度的。
了解什么是区块链:
了解以太坊和智能合约等:
Geth操作及相关说明
如果安装了geth,直接下载安装即可
下面是cookie云盘的链接:
安装完成后在文件目录下打开cmd运行
连接到网络
使用这个命令主网
geth --datadir ./ethdev/chain --networkid 1
打造私链
删除之前生成的chaindata,然后在ethdev目录下新建一个genesis.json
{"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":{}}
然后使用
geth init ./ethdev/genesis.json --datadir ./ethdev/chain
生成创世块,网络已经部署以太坊poa出块时间怎么设置,但是还没有块和账户
运行命令:
geth --datadir ./ethdev/chain/00 --nodiscover console 2>>./ethdev/chain/00/eth_output.log
实际上,上述命令的完整形式如下:
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
参数介绍:
--identity 给以太坊节点设置身份--rpc 启动 RPC(Remote Procedure Call,远程过程调用)通信,进行智能合约的部署和调试。不同的 RPC 设置,可以供 API 及远程访问他们的人使用--datadir 与初始化测试使用同一目录--port 网络监听端口,设置端口是为了防止在多条链之间发生端口冲突--nodiscover 表示该节点对外不可见--networkid 是一个数字,表示设置当前区块链的网络 ID,以区分不同的网络,第一次可以随意设置,但之后如果要链接同一条链,需要去取对应的 networkid(主网 ID 为 1,主网的测试网络 ID 为 2)--rpcapi "db,eth,net,web3" 这条命令主要是描述哪些接口可以通过 RPC 来访问,在默认情况下,geth 开启的是 web3 接口--dev 启用开发者网络(模式)开发者模式会使用 POA 共识,默认预分配一个开发者账户,并会自动开启挖矿--allow-insecure-unlock 是新版的 geth 禁用了 HTTP 通道解锁账户,加上这个东西就可以 unlock 了
控制台是一个交互式的javascript执行环境,内置了运行以太坊的JavaScript对象
普通操作
eth.accounts 查看现有账户
personal.newAccount() 创建一个账号,括号内可以填写密码。 首次创建账户的用户名默认为coinbase
账户数据存放在block目录下的keystore文件夹中
eth.coinbase(它似乎返回哈希)
eth.getBalance(eth.coinbase) 查看coinbase账户余额
miner.start()开始挖矿,挖出的以太币归默认的eth.accounts[0]所有,也就是coinbase。 在测试网络中,将genesis.json中的难度值设置为较小的值,将更容易挖以太币
eth.blockNumber 查看当前区块号(一开始显示为0,后面会出现)
miner.stop() 停止挖矿
eth.getBalance(eth.coinbase) 查看coinbase当前余额
web3.fromWei(eth.getBalance(eth.coinbase), "ether") 以以太的形式显示余额
u0=eth.coinbase 重命名账户
接下来,让我们创建几个帐户并尝试转账
个人的。 新账户()
个人的。 新账户()
u1=eth.accounts[1]
u2=eth.accounts[2]
开始交易
从u0转100个ETH到u1,报错,因为coinbase没有解锁
eth.sendTransaction({from:u0,to:u1,value:web3.toWei(100,'ether')})
personal.unlockAccount(u0,'123456')
unlock u0后接123456为密码,解锁后交易成功
再转100给u2
eth.sendTransaction({from:u0,to:u2,value:web3.toWei(100,'ether')})
交易完成后没有变化,使用txpool.status查看
Pending为2,表示有两笔交易已经提交但未处理,因为刚才的交易还没有写入区块,写入区块的方式是挖矿⛏
我们可以通过交易的哈希值来查看之前的一笔交易
查看对应的区块eth.getBlock(209)
帐户和密钥
账户在以太坊中扮演着重要的角色。 以太坊中有两种账户,即外部账户和合约账户。这里,外部账户简称账户,合约账户简称合约。 外部账户和合约账户都是账户的一般概念,这些账户实际上是状态对象。
外部账户的余额是外部账户的状态对象; 合约账户的状态,除了余额,还有一个存储合约。所有账户的状态就是以太坊网络的状态,以太坊网络的状态随着每次区块更新而变化
限制以太坊网络只有外部账户并且这些账户只能进行交易,相当于创建了一个只能交易以太币的“山寨币”
账户是用户的外部身份。在使用公钥签署交易后,以太坊虚拟机可以安全地验证交易的发起者
每个账户对应一对密钥,私钥和公钥
账户和地址是一一对应的,账户索引来自key的最后20字节
每个私钥-地址被编码成一个密钥文件,密钥文件的大小是一个JSON格式的文本文件
密钥文件的一个重要部分,即账户的私钥,通过创建账户时输入的密码进行加密保护
密钥文件存放在以太坊客户端的keystore目录下,需要定期备份
搭建私有链多节点
net 查看网络状态
网。 然后tab键有命令完成提示
net.listening 检查网络是否正在监听
net.peerCount 查看连接的节点数
管理员查看网络
行政。 检查管理员可以执行的操作
书不详,差评,参考:
新开一个节点,这里我重新设置一下,把这些节点移到链上
geth init ./ethdev/genesis.json --datadir ./ethdev/chain/01
进入另一个控制台:
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
进入另一个节点1的控制台(之前用过的控制台),运行如下命令连接到节点2
admin.addPeer("enode://928acba0da90d952b3802f7ddab2a99d29164934c407b56f8c47ed52d44e843314457a40e9ff1dd5d2da632b5be6f8d346fddac35b9f2755650a17ed78a2e139@127.0.0.1:30304")
连接成功后,节点2会开始同步节点1的区块。同步完成后,只要任何一个节点开始挖矿,另一个节点就会自动同步区块,向任何一个节点发送一笔交易,另一个节点节点也会收到交易信息。 书上说了这里就不展示了
使用 net.peerCount 查看连接的节点数
当然,除了在控制台添加命令外,还可以在--datadir指定的目录下添加static-nodes.json文件,这样各个节点就可以联系上了,如下:
{ "enode://xxxxxxxx" //boot node 的地址}
抄书
以太坊钱包
以太坊钱包软件到这里下载:
新版打不开,老版可以,cookie云盘:
下载下来直接解压:先在cmd中启动node,然后打开这个
第一次运行需要一段时间。 去吃饭了,不知道要等多久。 弹出下载框,关闭即可。
就是这样
发生这种情况时,单击运行
主界面!
实施多重签名
多重签名是指交易需要多人同意才能生效。好处是当要从账户中提取大量以太币时,需要多个账户进行身份验证才能成功提取,所以创建一个多重签名钱包至少需要两个账户
另外,如果要向主账户(创建多签钱包的账户)添加不少于0.02 Ether,这是创建多签钱包合约的交易手续费,至少1 Ether是必需的,因为当前的Mist需要足够的gas来保证多签合约能够正确执行交易,所以一开始主账户中至少要有1.02个以太坊
只需订购一个
选择右边的复制地址
保存两者的地址:
0xE2fA80E6D74b9f63157EcD131Eb11F8130D0416D
0x27EdE661c026b64DdEF9d9D965d710af40afaea0
点击钱包合约
设置它
然后创建
然后可以自己设置最高交易手续费,输入密码即可
只有在挖矿状态下才能将合约打包到区块中
使用我们自己的账户转一个账户到我们刚刚创建的钱包
如果转移的金币不够,会有提示
如果正常,则正常传输