区块链项目 - 13 网络服务

本文详细介绍了在以太坊项目中如何设置NODE_ID,并进行项目配置,包括区块链验证逻辑、客户端服务器的使用,以及Version信息处理、获取节点区块链高度等关键步骤,逐步构建分布式网络服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

13. 网络服务

13.1 NODE_ID设置

现在我们需要为我们搭建好的公链搭建网络层面的连接,到时候项目完成,意味着这份代码就代表一个客户端

拷贝代码:/Users/qinjianquan/pc-network/Part70-Merkle-NODE_ID

先转账测试代码是否正常工作:

./bc transfer -from '["1NQ43HNtgWCcbRvam2j8SN7VQD5m2nEgCU"]' -to '["16WdQu5DuEPLuDXWqZiwKW4XdQWH3L7rxo"]' -amount '["2"]'

接下来我们开始正式做网络相关的工作

我们设置一个环境变量,此时每次在启动客户端时就需要输入一个任意NODE_ID值,如:export NODE_ID=3000

func (cli CLI) Run() {

	isValidArgs()

	//get Node ID from env var
	nodeID := os.Getenv("NODE_ID")
	if nodeID == "" {
		fmt.Printf("NODE_ID is not set\n")
		os.Exit(1)
	}
	fmt.Printf("NODE_ID:%s\n", nodeID)
	--
}

13.2 NODE_ID项目配置

按照惯例先把之前的文件复制并重新命名

/Users/qinjianquan/publicChain/Part71-Net-NODE_ID-Configuration

然后我们需要重新配置数据库和钱包文件

格式化数据库

/Users/qinjianquan/publicChain/Part71-Net-NODE_ID-Configuration/src/Blockchain_Iterator.go

const dbName = "blockChain_%s.db"

然后更改部分函数,另外也需要为涉及的函数增加一个参数nodeID string

func CreatBlockchainWithGenesisBlock(address string, nodeID string) *Blockchain {

	//format db name
	dbName := fmt.Sprintf(dbName, nodeID)

	if DBExists(dbName) {
		fmt.Println("Genesis block existed")
		os.Exit(1)
	}
	--
}
func BlockChainObject(nodeID string) *Blockchain {

	//format db name
	dbName := fmt.Sprintf(dbName, nodeID)

	if DBExists(dbName) {
		fmt.Println("database didn't exist")
		os.Exit(1)
	}
	--
}

格式化钱包

/Users/qinjianquan/publicChain/Part71-Net-NODE_ID-Configuration/src/Wallets.go

const walletFile = "wallets_%s.dat"
func NewWallets(nodeID string) (*Wallets, error) {

	walletFile := fmt.Sprintf(walletFile, nodeID)

	//to find the file,if there is no file,create a one
	if _, err := os.Stat(walletFile); os.IsNotExist(err) {
		//create a struct
		wallets := &Wallets{}
		//access its property and initialize it
		wallets.WalletMap = make(map[string]*Wallet)
		return wallets, err
	}
	--
}

当然这也需要更新与之相关的其他函数,根据提示补充即可

这样做的目的在于可以将节点的印记和数据库、钱包关联起来,以作区分

编译并设置NODE_ID

go build main.go
export NODE_ID=3000
//创建钱包
./main createWallet  
NODE_ID:3000
Wallet address: 15wtkW1HNytLtdbmm448Le6WaftU8hq5Lv
//创建创世区块
./main createBlockChain -address 15wtkW1HNytLtdbmm448Le6WaftU8hq5Lv 
NODE_ID:3000
is creating genesis block...
Block hash:00006001e75e2905628142518f09a0fd03ef078b1040518056d2e44e03b80ca1

查看数据库和钱包文件,其名称如预期的一样已被更改

ls
blockChain_3000.db	main			main.go			src			wallets_3000.dat

拷贝重命名数据库

cp blockChain_3000.db blockChain_3001.db
qinjianquan@MacBook-Pro-10 Part71-Net-NODE_ID-Configuration % ls
blockChain_3000.db	blockChain_3001.db	main			main.go			src			wallets_3000.dat

用新的节点创建钱包

NODE_ID=3001
qinjianquan@MacBook-Pro-10 Part71-Net-NODE_ID-Configuration % ./bc createWallet
NODE_ID:3001
Wallet address: 1G6xGK8Zn1AZVAW6LcdDr2fwf7RqWXWhEs
1
./bc getAddressList
NODE_ID:3001
Address list:
1G6xGK8Zn1AZVAW6LcdDr2fwf7RqWXWhEs
13iAHiLFxYiqNSJHP2baiFyDumd9chEfAU

注意:此时还是在一条链上

13.3 区块链的验证逻辑

按照惯例先把之前的文件复制并重新命名

/Users/qinjianquan/publicChain/Part72-Net-Mine_Cli

现在我们在转账时增加验证环节

/Users/qinjianquan/publicChain/Part72-Net-Mine_Cli/src/CLI.go

func (cli CLI) Run() {
--
flagSendBlockVerify := transferBlockCmd.Bool("mine", false, "Whether to verify now")
--
if transferBlockCmd.Parsed() {
		if *flagFrom == "" || *flagTo == "" || *flagAmount == "" {
			printUsage()
			os.Exit(1)
		}

		from := JSONToArray(*flagFrom)
		to := JSONToArray(*flagTo)

		//verify the validity of address before transaction occurs
		for index, fromAddress := range from {
			if IsValidForAddress([]byte(fromAddress)) == false || IsValidForAddress([]byte(to[index])) == false {
				fmt.Println("Address is invalid")
				printUsage()
				os.Exit(1)
			}
		}

		amount := JSONToArray(*flagAmount)
		cli.send(from, to, amount, nodeID, *flagSendBlockVerify)
	}
	--
}

/Users/qinjianquan/publicChain/Part72-Net-Mine_Cli/src/CLI_transfer.go

func (cli CLI) send(from []string, to []string, amount []string, nodeID string, mineNow bool) {

	blockchain := BlockChainObject(nodeID)
	defer blockchain.DB.Close()
	if mineNow {
		//mine a new clock
		blockchai
内容概要:本文档主要介绍了Intel Edge Peak (EP) 解决方案,涵盖从零到边缘高峰的软件配置和服务管理。EP解决方案旨在简化客户的入门门槛,提供一系列工具和服务,包括Edge Software Provisioner (ESP),用于构建和缓存操作系统镜像和软件栈;Device Management System (DMS),用于远程集群或本地集群管理;以及Autonomous Clustering for the Edge (ACE),用于自动化边缘集群的创建和管理。文档详细描述了从软件发布、设备制造、运输、安装到最终设备激活的全过程,并强调了在不同应用场景(如公共设施、工业厂房、海上油井和移动医院)下的具体部署步骤和技术细节。此外,文档还探讨了安全设备注册(FDO)、集群管理、密钥轮换和备份等关键操作。 适合人群:具备一定IT基础设施和边缘计算基础知识的技术人员,特别是负责边缘设备部署和管理的系统集成商和运维人员。 使用场景及目标:①帮助系统集成商和客户简化边缘设备的初始配置和后续管理;②确保设备在不同网络环境下的安全启动和注册;③支持大规模边缘设备的自动化集群管理和应用程序编排;④提供详细的密钥管理和集群维护指南,确保系统的长期稳定运行。 其他说明:本文档是详细描述了Edge Peak技术及其应用案例。文档不仅提供了技术实现的指导,还涵盖了策略配置、安全性和扩展性的考虑,帮助用户全面理解和实施Intel的边缘计算解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值