以太坊的安装、私有链创世区块搭建以及智能合约的部署

相关阅读: 区块链项目——区块链网上安全商铺(合约代码、前端、后台)

文章目录

1. 以太坊的安装、私有链创世区块搭建、私有链节点的加入

1.1 以太坊的安装

官方下载地址:https://geth.ethereum.org/downloads/ 下载相应系统版本的geth,安装成功后可以查看版本信息:

1.2 私有链创世区块搭建

  • 先创建一个genesis.json文件,内容如下:

  • 使用geth --datadir “./chain” init ./genesis.json命令初始化创世区块 –datadir指定当前区块链网络数据存放的位置在chain目录中。

  • 启用私有链

–nodiscover:私有链地址,不会被网上看到; console:启动命令行模式,在Geth中执行命令; 在当前目录执行tail -f eth_output.log,可以看到输出日志:

(注:windows要执行tail命令首先先下载tail.exe,并把该文件加入到C:\Windows\System32下,下载地址:http://files.cnblogs.com/hantianwei/tail.zip)

  • 添加和查看账户

  • 挖矿

这时eth_output.log可以看到挖矿的记录。 再次查询余额发现不再是0,这是挖矿所得。

1.3 私有链节点的加入

  • 查看第一个节点的enode url信息

  • 再打开另一个终端,以相同的方式初始化第二个节点:

启动第二个节点:

因为在同一台计算机上,所以要指定另一个端口。

  • 把第一个节点作为peer添加进来

  • 验证 在第二个节点中输入:

第一个节点输入:

peerCount为1,且该peer的node id与第二个节点相符,说明添加成功。

2. 对getBlock中所得区块的各个字段的解释

  • difficulty:BigNumber,当前块的难度,会随着计算速度的变化而调整。
  • extraData: 字符串,额外数据,可以包含个性信息,或者是附加说明。
  • gasLimit:Number,设置对gas的消耗总量限制,用来限制区块能包含的交易信息总和。
  • gasUsed:Number,当前区块累计使用的总的gas
  • hash:字符串,区块的哈希值
  • logsBloom:字符串,由日志信息组成的一个Bloom过滤器(数据结构)
  • miner:字符串,20字节,挖出该区块(获得奖励)的矿工
  • mixHash:一个Hash值,当与nonce组合时,证明此区块已经执行了足够的计算
  • nonce:字符串,8字节,POW生成的哈希,当与mixHash组合时,证明此区块已经执行了足够的计算
  • number:当前区块的计数(从创世区块0开始递增1)
  • parentHash:字符串,32字节,父区块的Hash值
  • receiptsRoot:此区块所有交易收据的树的根节点Hash值
  • sha3Uncles:字符串,32字节,叔区块(父区块的兄弟区块)的哈希值
  • size:Number,当前区块的字节大小
  • stateRoot:字符串,32字节,此区块最终状态树根节点的Hash值
  • timestamp:Number,此区块初始化时的unix的时间戳
  • totalDifficulty:BigNumber,从区块链的第一个区块到此区块的难度的总和
  • transactions:数组,交易对象,或32字节的交易哈希
  • transactionsRoot:字符串,32字节,此区块的所有交易组成的树的根节点Hash值
  • uncles:数组,叔哈希(父区块的兄弟区块)的数组

其他未在这里出现的值:

  • ommerHash:当前区块ommers列表的Hash值
  • beneficiary:接收挖此区块奖励的账户地址

3. 对日志输出的解释

  • 启用时日志: 主要是一些配置、协议的初始化; 内存、缓存等的分配、生效和加载等。

  • 挖矿日志: Updated mining threads:每次开始挖矿时更新挖矿线程; Transaction pool price threshold updated:每次开始挖矿时更新交易池的价格阈值; Commit new mining work:提交新的挖矿工作; Generating DAG in progress:挖矿一开始都要生成DAG(Directed Acyclic Graph,有向无环图),从生成的DAG里面找随机数做hash,生成之后就正常挖矿了; Successfully sealed new block:成功封装新区块; block reached canonical chain:区块到达权威链,number是区块号; mined potential block:挖矿,挖掘潜在区块。

  • 其他 Seting new local account:设置新本地账户 Submitted transaction:提交交易

4. 智能合约的部署

  • 编写简单智能合约

  • 在Remix下编译合约

编译成功后,点击Details会弹出一个信息框,复制WEB3DEPLOY框中的代码:

  • 部署合约
    • 在geth启用私链,解锁账户地址:

    • 开始挖矿产生新的区块,合约才能成功部署。开始挖矿后,把复制的代码粘贴进来,回车,过一会能看到Contract mined! 说明部署成功。

    • 现在可以在geth中调用合约中的函数f:(3 * 8 = 24)

5. 对交易的字段的解释

解锁账户 --> 发送交易 --> 挖矿 --> 查询交易

blockHash:交易所在块的Hash; blockNumber:交易所在块的块号; from:交易发送者的地址; gas:该交易允许消耗的最大gas数量; gasPrice:交易发送者愿意支付给矿工的gas单价; nonce:用来区别同一用户发出的不同交易的标记; hash:该交易的哈希值,作为交易的ID; input:存在的数据字段,如果存在,则表明该交易是一个创建或者调用智能合约交易; to:交易接收者的地址; r、s、v:交易签名的三个部分,由发送者的私钥对交易hash进行签名生成。 value:发送者要转移给接收者的以太币数量;

6. 附:常用指令小记

  • 初始化一个创世区块,启用私链,显示输出日志 geth --datadir “./chain” init ./genesis.json geth --datadir “./chain” --nodiscover console 2>>eth_output.log tail -f eth_output.log
  • 查看账户信息 (web3.)eth.accounts (web3.)eth.accounts[0] (web3.)eth.getBalance[eth.accounts[0]] web3.fromWei(web3.eth.getBalance(acc0)) web3.toWei(3,“ether”)
  • 创建与解锁账户 (web3.)personal.newAccount(“123456”) acc0 = web3.eth.accounts[0] (web3.)personal.unlockAccount(acc0,“123456”)
  • 挖矿 miner.start(1) miner.stop()
  • 交易相关 eth.sendTransaction({from:acc0,to:acc1,value:web3.toWei(3,“ether”)}) eth.getTransaction(“0x78af0530e0e77c3b5b8a91a0720a11abe4436500a169953234ec987ebb3725c7”)

一个相对完整的区块链项目: 区块链项目——区块链网上安全商铺(合约代码、前端、后台)

原文地址:https://cloud.tencent.com/developer/article/2028463

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340