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介面,都是獲取私鏈交易數據的有效方法。選擇哪種方式取決於你的具體需求和場景。當然,如果你想進一步深入學習以太坊技術,我推薦你參考一些實戰教程,例如:以太坊教程。