智能合约部署之全国职业院校技能大赛“区块链技术应用”赛项—“航班延误险案例”
1.启动虚拟机上的区块链
(1)打开VMware虚拟机,在桌面中点击右键,选择Open Terminal打开命令行窗口。
(2)使用”cd geth_local/”命令,切换至区块链根目录,输入下面的命令启动区块链。
geth --datadir ./data --http --http.addr=0.0.0.0 --http.port 8545 --http.corsdomain "*" --http.api eth,net,web3,personal,admin --nodiscover --maxpeers 30 --allow-insecure-unlock --rpc.gascap 0 --rpc.txfeecap 0 --rpc.allow-unprotected-txs --miner.gaslimit 1000000000000 console
该命令是启动 Geth(Go Ethereum 客户端)的配置,用于运行一个以太坊节点并开启多种功能。以下是各参数的详细解释:
核心参数解析
--datadir ./data
指定区块链数据存储目录为当前路径下的 ./data 文件夹。
--http
启用 HTTP-RPC 服务,允许外部通过 HTTP 协议与节点交互(如 JSON-RPC 调用)
--http.addr=0.0.0.0
监听所有网络接口(允许外部设备访问,而不仅是本地 127.0.0.1)。
--http.port 8545
HTTP-RPC 服务端口设为 8545(默认端口)。
--http.corsdomain "*"
允许所有域名的跨域请求(* 表示不限制,开发环境常用,生产环境不安全)。
--http.api eth,net,web3,personal,admin
开放的 RPC API 模块:
eth: 以太坊基础功能(如查询余额、发送交易)。
net: 网络状态(如节点列表、连接数)。
web3: 通用 Web3 功能。
personal: 账户管理(如解锁账户)。
admin: 节点管理(如添加私有链)。
--nodiscover
禁用节点自动发现,防止被公开网络发现(适合私有链或测试网)。
--maxpeers 30
最大连接对等节点数为 30。
--allow-insecure-unlock
允许通过 RPC 解锁账户(即使未通过本地控制台操作,存在安全风险)。
--rpc.gascap 0
取消 RPC 调用中单笔交易的 Gas 上限(0 表示无限制,需谨慎使用)。
--rpc.txfeecap 0
取消 RPC 调用中单笔交易的手续费上限(0 表示无限制)。
--rpc.allow-unprotected-txs
允许发送未受 EIP-155 保护的交易(兼容旧版客户端,但可能引发重放攻击)。
--miner.gaslimit 1000000000000
设置区块的 Gas 上限为 1,000,000,000,000(远高于默认值,适用于高吞吐量测试)。
console
启动交互式控制台,可直接输入 Geth 命令(如 eth.blockNumber)
典型使用场景
开发/测试环境:快速启动一个私有链节点,允许外部服务(如 DApp 前端)通过 HTTP-RPC 交互。
高风险配置:
allow-insecure-unlock 和 corsdomain “*” 会降低安全性,仅限受信任网络使用。
无 Gas/手续费限制可能导致资源滥用(如恶意交易阻塞节点)
2.私钥、公钥和地址
简单来说,区块链账户有着三大要素:私钥、公钥、地址。那它们之间有何关系,又是如何生成的呢?
如果用一句话说明,那就是:私钥 —> 公钥 —> 地址。一般而言,私钥通过随机数生成,随后基于密码算法生成公钥和地址,并且这个过程是单向不可逆。
私钥:正如银行账户一般需要密码登入,区块链的账户也是通过密码的方式管理的,只不过这个密码也就是“私钥”,要更为复杂。大家都知道,计算机是用0、1存储数据,私钥就是由长度为256的0、1组成。对于区块链私钥而言,想要破解这套密码,就算把全世界的计算机都运转起来,也运算不到它的亿分之一,因而足够安全。
公钥:它是私钥的补充,以验证私钥的“签名”,并在区块链全网公开。整个过程简单来说,就好比要动用你的账户的资产,那么你需要’私钥’来对这个行为盖个“签名”,同时把可以验证这个签名对不对的“公钥”,告诉所有人,那么其它人就可以验证这个行为合法性及来源。
地址:地址是由公钥产生的,也是系统进行交互的标识。一方面,由于公钥太长,在交易中不方便使用,可以通过对公钥哈希进行SHA256、RIPEMD160、Base58算法加密生成地址。另一方面对于没有发送过的交易,并不想暴露自己的公钥,而地址是通过摘要算法生成的,不会暴露公钥的真实内容。
3.分布式账户的价值
从上述特征介绍可以看出,区块链的账户模式与传统银行账户体系有着很大差别。可以说,未来金融的颠覆性创新,将基于分布式账户而展开:
首先,开户更加便捷。在区块链上开账户不需要任何人的许可,只需要用非对称的加密算法生成一对公钥或者私钥,这个账户就开通完成了;并且不再需要去银行柜台提供个人资料,接受银行的资料审核。
第二,账户智能化。加密账户体系实际上是计算机程序,是一串代码,对这个账户可以进行编程,使得它可以智能化,可以跟智能合约结合实现更多场景的应用。
第三,账户法人化。唯一能够证明你持有加密货币的权属就是私钥,没有任何第三方中介机构来帮忙确认数字货币的权利,也就是我们的产权。
第四,开户者无特定对象。在加密账户体系上不仅个人可以开账户,机构可以开账户,未来互联网上的上万亿台传感器等设备也可以在上面开设自己的账户。这是和银行账户巨大的不同,其意味着更多的账户、交易是机器和机器之间完成,而不是人和人之间。以无人驾驶汽车为例,如果无人驾驶汽车在路上行驶的时候,把所有的影像传回一个中心化的服务器,再发出指令给司机,那么将造成很多交通事故。所以,有很多交易会在机器和机器之间发生。区块链上的账户也是和机器设立的,开户无需许可。
第五,分布式的记账。现有的体系有记账的确认者,但区块链没有。区块链是多方共同记账,共同来维护一个账本,使得信息完全对等透明。
第六,穿透式的账户管理。首先,基于区块链使得多种事务可在一个账户上记账,除了资金流,还可以将信息流、物流、以及社会关系,甚至是社交网络的信息,和账户对应起来。从而让最原始的数据、最原始的资料、最原始的信息都可以掌握穿透,而且不可篡改,永久保存,可追溯。其次依靠共识算法,交易清算和结算是同时完成的。现有的记账账户体系是以天作为记账单位,但基于分布式账本可实现秒级响应。
初始化genesis配置文件
geth --datadir chain init genesis.json
启动 geth客户端,进入console模式
geth --datadir data --identity “HDChain” --http --http.addr “0.0.0.0” --http.api=“db,eth,net,web3,personal,web3” --http.corsdomain “*” --nodiscover --networkid 1521 console
2.1 设置挖矿的公钥账号
personal.newAccount()
eth.accounts
eth. getBalance(eth.accounts[0])
miner.setEtherbase(eth.accounts[0])
2.2 启动挖矿
miner.start(1)
注:第一处启动 geth进行挖矿必须设置账号,否则会出现问题 “etherbase must be explicitly specified”
以后再启动就可以直接加上–mine挖矿参数,如下
geth --datadir ./data --http --http.addr=0.0.0.0 --http.port 8545 --http.corsdomain "*" --http.api eth,net,web3,personal,admin --nodiscover --maxpeers 30 --allow-insecure-unlock --rpc.gascap 0 --rpc.txfeecap 0 --rpc.allow-unprotected-txs --miner.gaslimit 1000000000000 console
4. geth参数
操作步骤:
(1) 在PC机桌面上启动VMware虚拟机软件,在桌面中点击右键,选择Open Terminal打开命令行窗口。
(2) 使用”cd geth_local/”命令,切换至区块链根目录,输入下面的命令启动区块链。
geth --datadir ./data --http --http.addr=0.0.0.0 --http.port 8545 --http.corsdomain "*" --http.api eth,net,web3,personal,admin --nodiscover --maxpeers 30 --allow-insecure-unlock --rpc.gascap 0 --rpc.txfeecap 0 --rpc.allow-unprotected-txs --miner.gaslimit 1000000000000 console
(3) 启动区块链成功后,使用下面的命令查看当前账户。
eth.accounts
(4) 使用下面的命令查看当前账户余额,当前账户余额显示为0。
eth.getBalance(eth.accounts[0])
(5) 部署合约需要消耗ETH币,需要进行挖矿获得ETH币,使用下方命令进行挖矿操作,命令启动后会产生交易,等待几分钟之后会自动停止,并使用第四步命令,查询账户余额,这时账户余额会增加。
miner.start(3);admin.sleepBlocks(3);miner.stop();
智能合约,是一段写在区块链上的代码,一旦某个事件触发合约中的条款,代码即自动执行。也就是说,满足条件就执行,不需要人为操控,dd获取资源。
















暂无评论内容