元宇宙非小号金色财经交流群社区官网

区块链兄弟连CLI命令行接口教程分享

浏览:79|时间:2023-06-13 21:08:40
直到如今,我们的代码还没有为外部应用提供任何实际操作接口。在之前的例子中,我们在main函数中使用NewBlockchain创建新的区块链,并使用AddBlock添加新的区块。现在,我们可以改进并提升命令行的操作接口。我们必须像下面这样使用命令:

$ blockchain_go addblock "Pay 0.031337 for a coffee" $ blockchain_go printchain

所有命令行操作方法都将被CLI构造解决:

type CLI struct { bc *Blockchain }

在Run函数中添加CLI接口:

func (cli *CLI) Run() { cli.validateArgs() addBlockCmd := flag.NewFlagSet("addblock", flag.ExitOnError) printChainCmd := flag.NewFlagSet("printchain", flag.ExitOnError) addBlockData := addBlockCmd.String("data", "", "Block data") switch os.Args[1] { case "addblock": err := addBlockCmd.Parse(os.Args[2:]) case "printchain": err := printChainCmd.Parse(os.Args[2:]) default: cli.printUsage() os.Exit(1) } if addBlockCmd.Parsed() { if *addBlockData == "" { addBlockCmd.Usage() os.Exit(1) } cli.addBlock(*addBlockData) } if printChainCmd.Parsed() { cli.printChain() } }

我们使用规范的flag分析参数:

addBlockCmd := flag.NewFlagSet("addblock", flag.ExitOnError) printChainCmd := flag.NewFlagSet("printchain", flag.ExitOnError) addBlockData := addBlockCmd.String("data", "", "Block data")

首先,我们创建了两个子命令,addblock和printchain,并使用“-data”标识我们的代码看起来很像我们之前写的代码。不同之处在于,我们现在使用BlockchainIterator来解析整个区块链中的所有区块。

最后修改main函数:

func main() { bc := NewBlockchain() defer bc.db.Close() cli := CLI{bc} cli.Run() }

请注意,第一次运行时,如果BoltDB中没有区块链,则无论键入什么参数,都会创建一个新的区块链。

现在,我们可以测试一下我们的代码是否工作正常:

首先安装BoltDB:

$ go get github.com/boltdb/bolt/...

然后运行程序:

$ blockchain_go printchain No existing blockchain found. Creating a new one... Mining the block containing "Genesis Block" 000000edc4a82659cebf087adee1ea353bd57fcd59927662cd5ff1c4f618109b Prev. hash: Data: Genesis Block Hash: 000000edc4a82659cebf087adee1ea353bd57fcd59927662cd5ff1c4f618109b PoW: true

$ blockchain_go addblock -data "Send 1 BTC to Ivan" Mining the block containing "Send 1 BTC to Ivan" 000000d7b0c76e1001cdc1fc866b95a481d23f3027d86901eaeb77ae6d002b13 Success!

$ blockchain_go addblock -data "Pay 0.31337 BTC for a coffee" Mining the block containing "Pay 0.31337 BTC for a coffee" 000000aa0748da7367dec6b9de5027f4fae0963df89ff39d8f20fd7299307148 Success!

$ blockchain_go printchain Prev. hash: 000000d7b0c76e1001cdc1fc866b95a481d23f3027d86901eaeb77ae6d002b13 Data: Pay 0.31337 BTC for a coffee Hash: 000000aa0748da7367dec6b9de5027f4fae0963df89ff39d8f20fd7299307148 PoW: true Prev. hash: 000000edc4a82659cebf087adee1ea353bd57fcd59927662cd5ff1c4f618109b Data: Send 1 BTC to Ivan Hash: 000000d7b0c76e1001cdc1fc866b95a481d23f3027d86901eaeb77ae6d002b13 PoW: true Prev. hash: Data: Genesis Block Hash: 000000edc4a82659cebf087adee1ea353bd57fcd59927662cd5ff1c4f618109b PoW: true

本章小结:

本章中,我们完成了区块的分布式锁定,以及根据顺序解析所有区块的相关信息。下一章中,我们将可能完成地址、钱包和交易等内容。敬请期待!

分享 区块 区块链 教程 区块链兄弟

  • 2022年加密货币交易经验分享: 策略、技巧和成功故事。 SEO标题:2022加密货币交易经验分享

    2022年加密货币交易经验分享: 策略、技巧和成功故事。 SEO标题:2022加密货币交易经验分享

    2024-01-07 05:08:22

    当我第一次开始交易时,我失去了自2021年以来交易比特币所取得的一切。这对我作为初学者来说是一次极具挑战性的经历,它几乎让我完全失去了对交易加密货币的兴趣。因此,我决定在2022年再试一次,并开始利用各种资源(例如You...

  • 腾讯区块链企鹅大陆 区块链公司命名成功案例分享

    腾讯区块链企鹅大陆 区块链公司命名成功案例分享

    2022-04-07 11:04:40

    鹰飞国际是一家专注企业L1签证、移民、海外公司注册、海外商标注册等16年的老服务机构。总部位于加州洛杉矶,总部位于北京和深圳。自2002年成立以来,已帮助1万家公司成功申请各种签证、注册海外公司、海外商标等。鹰飞国际拥有...

  • 今天要和大家分享的是区块链钱包的骗局

    今天要和大家分享的是区块链钱包的骗局

    2022-04-01 14:25:44

    今天要和大家分享的是区块链钱包的骗局。目前市场上有各种区块链项目,哪个行业流行就会产生哪种链,哪种货币!这些区块链项目是金融投资项目,不同于我国重点发展方向所倡导的区块链技术。属于以区块链技术为诱饵,进行包装、投机、炒作...

  • HiBlock区块链社区邀请数字货币交易所开发者虎头锤分享

    HiBlock区块链社区邀请数字货币交易所开发者虎头锤分享

    2022-04-13 11:19:28

    HiBlock 区块链社区邀请数字货币交易所开发者分享神秘的数字货币交易所,从业务层面了解数字货币交易流程和关键点,从技术层面了解如何设计和构建数字货币交易水平。1课程介绍本课程从数字货币交易所的使用过程开始,简要解释了...

本站分享的区块链、Web3.0元宇宙、NFT、数字藏品最新消息等相关数藏知识快讯NFR资讯新闻,与金色财经非小号巴比特星球前线Btc中国官网无关,本站资讯观点不作为投资依据,市场有风险,投资需谨慎!不提供社区论坛BBS微博微信交流群等相关币圈信息发布!
本站内容来源于互联网,如存在侵权及违规内容投诉邮箱( zztaobao@vip.qq.com )