web3js以太坊开发
A. Geth 控制台使用及 Web3.js 使用
在以太坊的DAPP开发中,需要 页面开发 和 智能合约 开发,页面开发需要 H5 , 智能合约 开发用 Solidity 实现。页面和以太坊智能合约交互,就需要使用 Web3.js 。
Geth 控制台(REPL)实现了所有的 web3 API 及 Admin API ,如果你对Geth命令行不太熟悉,请参考之前的文章。
以太坊客户端Geth常用命令详解
重定向日志到文件
使用geth console启动时,会在当前的交互界面下时不时出现日志。
可以使用以下方式把日志输出到文件。
可以新开一个命令行终端输入以下命令查看日志:
重定向另一个终端
也可以把日志重定向到另一个终端,先在想要看日志的终端输入:
就可以获取到终端编号,如:/dev/test
然后另一个终端使用:
启动geth, 这是日志就输出到另一个终端。
如果不想看到日志还可以重定向到空终端:
日志级别控制
使用–verbosity可以控制日志级别,如不想看到日志还可以使用:
另外一个启动geth的方法是连接到一个geth节点:
B. 开发者指南:从 Web2 到 Web3,应学习哪些编程语言
程序猿过渡到 Web3.0,面临选择Solidity、Go、Haskell、Rust等语言时,应如何做出明智选择?
01写在前面
元宇宙、NFT等概念在区块链领域日益流行,Web3.0正处于早期发展阶段,区块链技术的革新不断涌现。这一领域吸引了大量人才,区块链开发人员成为热门职业。据统计,2021年加入区块链行业的人员数量创历史新高,达到34,000人。与传统金融领域相似,区块链领域同样处于人才需求高峰。
02Javascript & Solidity:以太坊
以太坊提供了四种专用语言,其中Solidity以其JavaScript启发的语法,成为以太坊的首选语言。它易于学习和使用,对于已经掌握JavaScript的Web开发人员来说,入门门槛较低。Solidity具有面向对象的特性,与JavaScript相似,但其主要用途是创建智能合约。通过使用web3.js和ethereum.js等JavaScript库,开发人员可以与以太坊节点进行交互,实现dApp的创建。自2020年以来,Solidity的社区和代码库迅速发展,成为区块链行业中应用广泛的编程语言之一。
03Haskell:纯函数式Web3编程语言
Haskell是一种功能型编程语言,通常作为Cardano的智能合约编程语言Plutus的基础。它的安全性源于高度抽象的函数概念,执行低层级任务,并在编译时进行类型检查,确保代码简洁、清晰且正确。Haskell使用惰性求值,提高程序运行速度,且自动内存管理减轻开发人员负担。尽管Haskell的开发者群体相对较小,但在生产高质量软件方面起着关键作用。掌握Haskell能够使开发人员在竞争中脱颖而出。
04Go:Cosmos和Polygon SD
Go是一种由Google开发的开源编程语言,旨在结合Python的易用性和C++的高效性。Cosmos和Polygon SDK通常使用Go,它具有丰富的本地库和跨平台特性,支持多线程并发执行,提升性能。Go的Web3实例包括Polygon Edge SDK,它提供了一个模块化框架,用于构建与以太坊兼容的网络。Go的学习曲线较平缓,对于有C/C++/Java经验的开发者来说尤其有利。根据Stack Overflow开发者调查,Go受到62%开发者的喜爱,并被持续使用。
05Rust:简单性、并发性和高效率
Rust是一种专注于安全和性能的多范式编程语言,具有强大的类型系统和所有权模型,确保内存和线程安全。Rust提供零成本抽象,实现高性能并发,且代码编译效率高。Rust具有优秀的文档和简便的编译器,易于诊断问题,提高开发效率。在Web3协议处理大量交易时,Rust提供了快速且强大的性能,使其成为理想选择。Rust的高吞吐量和并发能力使其在高负载场景下表现出色。
06最后:Rust是个潜力股
随着Web3协议对高性能和快速处理能力的需求增长,Rust因其优势成为热门选择。它减少了常见的错误,提供了强大的并发能力,适用于处理数万甚至数十万笔交易。尽管学习Rust有一定的难度,但其潜力巨大。与Solidity相比,虽然社区规模较小,但Rust在开发人员中的需求和青睐度正在增长。对于希望在区块链领域取得突破的开发人员来说,掌握Rust、Go、Haskell等语言将为他们提供更多机会。
C. 库对比:web3js 与 ethersjs
在区块链开发中,SDK或库是连接特定区块链的关键工具。以太坊网络的流行促使了ETH库的出现,如web3js和ethersjs,它们均支持EVM兼容的区块链,通过JSON-RPC协议实现通信。本文旨在对比分析这两个库,揭示它们的特性、优缺点,帮助开发者决定项目中采用哪个。
JavaScript作为互联网上最常用的语言,开发人员常利用它构建与区块链交互的工具。通过模块化,开发者可以避免重复编写代码,提升开发效率。例如,ethers.js提供了四个核心模块,如Provider、Contract、utils和Wallet,分别处理节点连接、智能合约交互、数据格式化和钱包管理。
ethers.js由加拿大软件工程师Richard Moore创建,以其轻量级和密钥管理优势而闻名。它与web3js相比,web3js虽然有基金会支持和更广泛的社区,但其大小较大、灵活性较差且许可更严格。web3js的核心模块如eth、net、shh和utils,分别对应以太坊连接、网络交互、 Whisper协议和实用工具。
在开发者体验上,ethersjs以更清晰的接口和易于理解的库结构受到好评。尽管web3js拥有更多的教程资源,但其维护和未来发展方向可能不如ethersjs得到保证。web3js的性能表现上,ethersjs由于体积小更适合前端应用,而文档方面,ethersjs通常被认为提供了更全面的入门指南。
总之,选择web3js还是ethersjs,取决于项目的具体需求,包括性能、易用性、文档和社区支持。尽管web3js在社区和使用量上占优,但ethersjs的简洁和专注可能更适合新手。开发者可以根据项目特点和自身需求权衡利弊,利用丰富的在线资源进行学习和实践。
D. 以太坊如何使用web3.js或者rpc接口获取交易数据交易时间与确认数
对于主网交易记录的查询,许多开发者会选择使用Etherscan,然而在面对自建私链时,这一选项不再适用。那么如何获取私链上的交易数据呢?一种常见的方法是监听链上的日志,然后将这些日志存入数据库,通过数据库进行查询。例如,你可以编写如下代码:
首先定义一个地址,比如:var addr = "";
接着使用web3库的eth.filter方法来监听特定地址上的交易,这一步操作的代码如下:var filter = web3.eth.filter({fromBlock: 0, toBlock: 'latest', address: addr});
监听完成后,使用filter.get方法获取所有交易,遍历这些交易,通过web3.eth.getTransaction方法获取具体的交易信息。例如:transactions.forEach(function(tx){ var txInfo = web3.eth.getTransaction(tx.transactionHash); // 将交易信息存入数据库 })
在这里,web3.eth.filter()用于监听链上的交易日志,web3.eth.getTransaction()则用于提取特定交易的详细信息。一旦获取到交易信息,就可以将其存储到数据库中,为后续查询提供支持。
除了上述方法外,还有其他方式可以实现这一目标,比如使用RPC接口。RPC接口提供了更多功能,包括查询账户余额、调用智能合约等,而不仅仅是监听交易。例如,你可以使用web3.eth.sendTransaction方法来发送交易,或使用web3.eth.getBalance方法来获取账户余额。
总之,无论是监听日志还是使用RPC接口,都是获取私链交易数据的有效方法。选择哪种方式取决于你的具体需求和场景。当然,如果你想进一步深入学习以太坊技术,我推荐你参考一些实战教程,例如:以太坊教程。