Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 久久浮力影院,日日干天天操,亚洲视频观看

          整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          在Visual Studio Code中安裝與配置C#詳細(xì)教程

          isual Studio Code是一款輕量級但功能強大的源代碼編輯器,它可以在你的桌面上運行,適用于Windows、macOS和Linux。它內(nèi)置了對JavaScript、TypeScript和Node.js的支持,并為其他語言(如C++、C#、Java、Python、PHP、Go)和運行時(如.NET和Unity)提供了豐富的擴展生態(tài)系統(tǒng)。本文以在Visual Studio Code中安裝與配置C#為例進行語言配置講解。



          下載并安裝Visual Studio Code

          • 登錄Visual Studio Code官網(wǎng),點擊"Download Visual Studio Code"下拉列表,選擇適合自己電腦系統(tǒng)的版本進行下載。

          • 雙擊已下載的安裝文件"VSCodeUserSetup-{version}.exe",根據(jù)安裝向?qū)崾具M行安裝,在此期間可以自行設(shè)置安裝路徑,且確保“添加到PATH(重啟后生效)”處于勾選狀態(tài)。

          下載并安裝.NET.Core.SDK

          • 進入https://dotnet.microsoft.com/download,點擊"Download .NET Core SDK",下載安裝文件。

          • 運行.NET Core SDK安裝文件,點擊“安裝”按鈕即可進行安裝,安裝完成后關(guān)閉窗口。

          • 打開“命令提示符”窗口,輸入命令"dotnet",按Enter鍵執(zhí)行命令,若出現(xiàn)如下圖所示關(guān)于怎樣使用dotnet的信息,則說明.NET Core SDK安裝成功。

          從 Visual Studio Code 市場安裝 C#擴展

          打開已安裝的Visual Studio Code程序,點擊左側(cè)”Extensions“圖標(biāo),在搜索框輸入"C#",選擇合適的C#擴展,點擊其右側(cè)的"Install"按鈕進行安裝。(注意:安裝完成后如果在右下角提示"The .NET Core SDK cannot be located. .NET Core debugging will not be enabled. Make sure the .NET Core SDK is installed and is on the path.",則有可能是因為你在安裝.NET Core SDK時Visual Studio Code處于打開狀態(tài),此時的解決辦法是關(guān)閉Visual Studio Code后再重新啟動)

          通過Visual Studio Code開始使用.NET Core

          .NET Core 提供了快速運行的模塊化平臺,用于創(chuàng)建在 Windows、Linux 和 macOS 上運行的應(yīng)用程序。 帶 C# 擴展的 Visual Studio Code 提供功能強大的編輯體驗,完全支持 C# IntelliSense(智能代碼填充)和調(diào)試。讓我們從 .NET Core 上的一個簡單“Hello World”程序入手:

          1.打開項目

          • 打開 Visual Studio Code。
          • 依次單擊左側(cè)菜單上的“資源管理器”圖標(biāo)和 “打開文件夾” 。
          • 從主菜單中選擇“文件” > “打開文件夾”,打開要在其中放置 C# 項目的文件夾,然后單擊“選擇文件夾”
          • 在我們的示例中,為項目創(chuàng)建名為“HELLOWORLD”的文件夾 。

          2.初始化 C# 項目:

          • 通過從主菜單中選擇“視圖” > “集成終端” ,從 Visual Studio Code 中打開集成終端。
          • 在終端窗口中,鍵入“dotnet new console”。
          • 此命令在已編寫“Hello World”簡單程序的文件夾中創(chuàng)建“Program.cs”文件,以及名為“HelloWorld.csproj”的 C# 項目文件 。

          3.運行"Hello World"程序

          • 鍵入 dotnet run,命令執(zhí)行完成后則會輸出"Hello World",并在項目文件下生成bin和obj文件。

          4.調(diào)試

          • 單擊打開 Program.cs。 在 Visual Studio Code 中首次打開 C# 文件時,會在編輯器中加載 OmniSharp。

          • Visual Studio Code 會提示添加缺少的資產(chǎn),以生成和調(diào)試應(yīng)用。 選擇 “是” 。


          • 若要打開調(diào)試視圖,請單擊左側(cè)菜單上的“調(diào)試”圖標(biāo)。找到窗格最上面的綠色箭頭。 請確保已選擇旁邊下拉列表中的“.NET Core Launch (控制臺)” 。

          • 單擊第 9 行旁邊的編輯器邊距 (編輯器中行號左側(cè)的空間)或者將文本光標(biāo)移動到編輯器中的第 9 行并按 F9,為項目添加斷點。

          • 請按 F5 或選擇綠色箭頭啟動調(diào)試。 在到達你在上一步中設(shè)置的斷點時,調(diào)試器會停止執(zhí)行程序。(調(diào)試時,可以在左上角的窗格中查看局部變量,也可以使用調(diào)試控制臺進行查看)。選擇最上面的藍色箭頭以繼續(xù)調(diào)試,或選擇最上面的紅色方塊以停止調(diào)試。

          述 | 楊曉兵

          編輯 | 伍杏玲

          出品 | CSDN(ID:CSDNnews)

          編者前記:

          編譯器是連接人類世界與機器世界之間的一座橋梁,它可將程序員理解的高級語言,轉(zhuǎn)換成程序高效執(zhí)行的機器碼。在 C/C++ 編譯器里,有 VC、Borland C++、GCC、Watcom C/C++ 等國外熱門編譯器,但屬于國內(nèi)自主研發(fā)的編譯器較少。

          畢竟開發(fā)一款實用的編譯器不易,涉及前端詞法、語法分析、語意分析、大量的編譯優(yōu)化等工作。而有一支團隊,不惜花費十余年精力完全自主研發(fā)出一款 YC 編譯器和 YC 瀏覽器內(nèi)核。

          為何他們不遺余力地自主研發(fā)編譯器和瀏覽器內(nèi)核?這款編譯器有何優(yōu)點呢?下面由 YC 編譯器的主要作者之一——楊曉兵,來講述這背后十多年來的漫漫研發(fā)路。

          以下為楊曉兵自述:

          初衷:“做一些對軟件行業(yè)進步有幫助的東西”

          十多年前,我在中國科學(xué)院電子學(xué)研究所工作,參與設(shè)計一些硬件電路。當(dāng)時我對硬件的興趣遠超軟件,后創(chuàng)業(yè)專門從事軟件工作。

          我在創(chuàng)業(yè)的過程中發(fā)現(xiàn),做此類軟件雖能賺錢,但無論做得怎樣,對軟件科學(xué)的進步都無絲毫作用。盡管付出很多,卻無成就感。

          操作系統(tǒng)、數(shù)據(jù)庫、編譯器以及瀏覽器內(nèi)核是不需要特殊專業(yè)知識的、開發(fā)難度非常大、最基礎(chǔ)的軟件產(chǎn)品。

          我想從這幾種軟件中選擇其中一項來自主研發(fā),雖然不能肯定做出什么成就,但我有希望能做出一些對軟件行業(yè)進步有所幫助的東西,使自己不枉踏入軟件這個行業(yè)。根據(jù)當(dāng)時的情況,我發(fā)現(xiàn)可先從瀏覽器內(nèi)核下手,于是我除了維護原有產(chǎn)品外,把主要精力都投入到瀏覽器的研發(fā)中。

          創(chuàng)新將 C 代碼內(nèi)嵌到 HTML

          兩年后,我們研發(fā)完成瀏覽器內(nèi)核的基本功能,如 HTML 的解析和顯示、JavaScript 腳本的執(zhí)行等。

          此時,我們發(fā)現(xiàn) HTML 的標(biāo)準(zhǔn)越來越復(fù)雜,導(dǎo)致開發(fā)難度越來越大,如果按照這樣的發(fā)展,瀏覽器內(nèi)核將無法走入市場。

          于是我重新思考:如果把 C 語言處理成像 JavaScript 腳本嵌入到 HTML 中,用內(nèi)嵌 C 代碼的 HTML 超文本做軟件的人機交互界面,這款內(nèi)核應(yīng)該會有點競爭優(yōu)勢。

          于是我們花費兩年半的時間將標(biāo)準(zhǔn) C 語言以 JavaScript 相似的方式在 HTML 中執(zhí)行,并擴展了一個 HTML 標(biāo)簽:<user>,每個 user 標(biāo)簽都可以用屬性 src 指定一個 C 源碼文件,user標(biāo)簽的顯示界面和所有行為都由它的 C 代碼決定。

          同時將 C 編譯器做成一個函數(shù),用該函數(shù)編譯生成 C 程序的可執(zhí)行代碼,執(zhí)行代碼可被存入文件或直接執(zhí)行。此時,我們將編譯器取名為 YC 編譯器,瀏覽器內(nèi)核取名為 YC 瀏覽器。

          三年又三年,漫漫研發(fā)路

          隨后,我們繼續(xù)完善瀏覽器內(nèi)核,將其中的一些內(nèi)核代碼獨立出來用內(nèi)嵌編譯器動態(tài)編譯執(zhí)行,并將大部分內(nèi)核源代碼開源。

          與此同時,我們又遇到一個問題:YC 編譯器雖然編譯速度較快,生成的卻是字節(jié)碼,執(zhí)行速度慢,而且與原生代碼相互調(diào)用(特別是回調(diào)函數(shù))的處理相當(dāng)繁瑣。因此用當(dāng)時的 YC 編譯器難以勝任開源代碼的編譯工作。

          為了解決自編譯瀏覽器內(nèi)核代碼的問題,我們決定修改 YC 編譯器,使它的字節(jié)碼轉(zhuǎn)換為原生的執(zhí)行碼,并擴展語法,使之具有少量的 C++ 語法。這個工作持續(xù)了三年。

          三年后,YC 編譯器功能增多,它提供一個函數(shù)像調(diào)用動態(tài)鏈接庫一樣直接調(diào)用 C 源碼中的函數(shù)。此時,瀏覽器內(nèi)核開源部分都可以用 YC 編譯器實時編譯執(zhí)行了。

          我們繼續(xù)改進瀏覽器內(nèi)核,將速度很慢的 JavaScript 字節(jié)碼改為二進制原生代碼,使 JavaScript 的執(zhí)行速度約提高約 100 多倍。同時將瀏覽器內(nèi)核代碼全部模塊化并開源,每個模塊都用 YC 編譯器動態(tài)編譯執(zhí)行,編譯器的部分源碼也開源(如內(nèi)嵌匯編編譯器源碼、反匯編源碼、C/C++ 字節(jié)碼的執(zhí)行源碼等),所有的開源代碼均由內(nèi)嵌的 YC 編譯器自動檢測編譯,動態(tài)執(zhí)行。這個工作大概耗時四年。

          開發(fā)至此,我想起谷歌和火狐瀏覽器都已開源,為什么不去看看它們的源代碼呢?于是找到這兩個瀏覽器的源碼。

          當(dāng)時由于一些原因,我分析谷歌瀏覽器源碼沒有編譯通過,而火狐的源碼很順利就編譯成功了,于是我就走上了分析火狐源碼之路。

          下載的火狐源碼由純 C 代碼和 C++ 代碼兩部分組成,經(jīng) Visual C++ 2013 編譯生成一個 xul.dll 文件和一個 firefox.exe 文件。

          我首先分析了它的 C 代碼,將所有的輸出函數(shù)全部改為類接口,并讓 xul.dll 通過 YC 編譯器函數(shù) YC_cppLoad 進行實時編譯,然后用類接口調(diào)用 C 源碼中的函數(shù)。這一步進行得很順利,若修改了火狐的 C 代碼,只要重新運行火狐瀏覽器便可生效,無需其它操作。

          曾經(jīng)的辦公桌

          接下來開始分析火狐 C++ 代碼。YC 編譯器只實現(xiàn)了少數(shù)幾個 C++ 語法,不能編譯火狐 C++ 代碼,故分析起來非常困難。

          為什么火狐 C 代碼容易分析,而它的 C++ 代碼難以分析呢?原來我用 YC 編譯器將它的 C 代碼生成匯編代碼文件、變量結(jié)構(gòu)定義文件、宏定義文件和預(yù)編譯文件,通過這幾個文件,大大減少了分析難度。

          因此我再次決定修改 YC 編譯器,使之完全支持 C++11 標(biāo)準(zhǔn),因為火狐 C++ 代碼幾乎使用了所有的 C++11 語法特性。先使用 STL 標(biāo)準(zhǔn)模板庫代碼進行編譯器的修改和調(diào)試,出乎預(yù)料,這個過程竟用了三年時間!之后,我用 YC++ 編譯器開始調(diào)試火狐 C++ 代碼。原以為 STL 那么復(fù)雜的代碼都可以編譯通過并正確執(zhí)行,火狐 C++ 代碼應(yīng)該能很快就編譯通過。沒想到,很多語法細(xì)節(jié) STL 沒有用到,而火狐 C++ 源碼用到了。于是又繼續(xù)修改 YC 編譯器,對火狐 C++ 的各個模塊進行編譯,這個過程持續(xù)了一年多

          雖然 YC 編譯器可以編譯全部火狐 C++ 代碼,但如何生成執(zhí)行代碼呢?先從主程序 Firefox.cpp 入手,經(jīng)整理,這個程序可用 YC 編譯器生成執(zhí)行代碼 Firefox.exe,并能順利運行。

          由于火狐 C++ 各模塊耦合緊密,很難拆分,經(jīng)過一個多月的工作,仍未能將其拆成多個獨立的源碼模塊以便于用 YC 編譯器實時編譯,動態(tài)執(zhí)行,這也許是我對火狐 C++ 源碼的整體結(jié)構(gòu)還不甚清楚之故,只見其樹木不見其森林。

          楊曉兵

          當(dāng)我準(zhǔn)備對火狐 C++ 代碼進行再一次總體分析時,有個偶然的機會參與到一個學(xué)校管理系統(tǒng)的開發(fā)中,因原有的管理系統(tǒng)經(jīng)常出故障,操作極其不方便。盡管沒有開發(fā) Web 服務(wù)程序的經(jīng)歷,但我做的軟件與 Web 服務(wù)器有極大關(guān)系。

          經(jīng)了解,要開發(fā)這種管理系統(tǒng)需要的軟件有:Apache 或 Nginx 服務(wù)器,數(shù)據(jù)庫 MySQL 或其它,編程工具 ASP 或 JSP 或 PHP 等,于是啟發(fā)我們自己研發(fā)這些工具。YC 的 C/C++ 和 JavaScript 編譯器和 HTML 解析器正好派上用場。

          經(jīng)過一段時間,一個穩(wěn)定的、可任意擴展的、多線程高并發(fā)的 HTTP 服務(wù)器就完成了。該服務(wù)器處理 YSP 文件生成網(wǎng)頁傳給瀏覽器。

          YSP 是我設(shè)計的與 ASP、JSP 和 PHP 功能相似的一種網(wǎng)頁編程語言。YC 服務(wù)器執(zhí)行 YSP 文件中的內(nèi)嵌 C/C++ 或 JavaScript 代碼,生成 HTML 超文本傳給終端設(shè)備。工具做好后,不久便做出了管理系統(tǒng)的雛形,這個雛形在發(fā)布的 YC 編譯器中可見到。

          做了上述這些工作后,我想是時候該寫本書介紹一下 YC 編譯器了,經(jīng)過一段時間編寫的《YC編譯器—多語言程序設(shè)計》(暫名)即將出版。

          當(dāng)我把書完成后,便立即投入64位的C/C++和JavaScript編譯器的開發(fā),目前開發(fā)進展順利,已進入測試階段。

          編者后記:

          三年時間,可將一個呱呱落地的嬰兒變成蹦蹦跳跳的幼兒,可將一名懵懂的職場新人變成沉穩(wěn)的老兵。而楊曉兵團隊沉下心,迎難而上,花費三年又三年、再一年、兩年、四年的時間只為突破一個個技術(shù)難點,最終自研出 YC 編譯器和 YC 瀏覽器內(nèi)核。

          在這過程中,楊曉兵坦言最大的挑戰(zhàn)不僅是技術(shù),還有思維的高度。這期間不僅有大量的研發(fā)工作,還為了優(yōu)化,多次重寫代碼,讓他堅持下來的是想為計算機軟件科學(xué)的發(fā)展做貢獻的匠心。

          目前楊曉兵團隊正在開發(fā) 64 位 C/C++ 編譯器,談及未來,楊曉兵表示先在國內(nèi)推廣,再走向海外。祝福楊曉兵。

          YC編譯器傳送門:http://www.ycbro.com

          果您是 web3 開發(fā)的新手,那么這是開始的地方!

          智能合約構(gòu)成了構(gòu)建在區(qū)塊鏈上的所有 dApp 的基礎(chǔ),它們通常使用自定義語言編寫,例如 Solidity(用于 Ethereum)或 Cadence(用于 Flow)。

          它們往往比傳統(tǒng)程序簡單得多,但風(fēng)險要高得多 - 單個智能合約錯誤可能導(dǎo)致數(shù)百萬美元在幾分鐘內(nèi)耗盡!

          您將在本課程中培養(yǎng)哪些技能?我們將引導(dǎo)您完成編寫和部署您的第一個智能合約所需的工具,包括:

          • ? Metamask: [1]用于與以太坊區(qū)塊鏈交互的軟件加密貨幣錢包,允許您支付 gas 費用來發(fā)布您的交易。
          • ? Solidity: [2]一種面向?qū)ο蟮木幊陶Z言,用于在以太坊上實現(xiàn)智能合約。
          • ? Hardhat: [3]一個以太坊開發(fā)環(huán)境,允許您編譯 Solidity 合約、在開發(fā)網(wǎng)絡(luò)上測試合約并查看 Solidity 堆棧跟蹤。
          • ? Etherscan: [4]一個在線區(qū)塊鏈瀏覽器,允許您查看公共區(qū)塊鏈上的交易、區(qū)塊和錢包狀態(tài)。
          • ? Alchemy: [5]一個 web3 開發(fā)者平臺,允許您通過免費節(jié)點與以太坊網(wǎng)絡(luò)的其余部分連接。

          如果你有興趣,讓我們開始吧!

          目錄

          1、什么是智能合約

          2、部署您的第一個智能合約

          3、什么是氣體

          4、與您的智能合約交互

          5、智能合約的結(jié)構(gòu)

          6、將您的合同提交給 Etherscan

          7、智能合約安全挑戰(zhàn)

          8、將合約集成到前端

          9、其他資源

          1、什么是智能合約?

          背景

          雖然這個概述主要是關(guān)于以太坊的,但實際上所有的概念都適用于支持智能合約的區(qū)塊鏈!

          智能合約是區(qū)塊鏈開發(fā)領(lǐng)域存在的主要原因。

          以太坊在 2013 年的核心創(chuàng)新是允許開發(fā)人員編寫稱為智能合約的小代碼塊,這些代碼可以部署到以太坊網(wǎng)絡(luò),獨立于其創(chuàng)建者運行。在以太坊中,智能合約是用 Solidity 編寫的,這是一種設(shè)計用于在以太坊虛擬機上運行的高級編程語言。[6]

          智能合約是定義一組規(guī)則或“合約”的程序,當(dāng)用戶在區(qū)塊鏈上調(diào)用時,它會自動執(zhí)行編碼規(guī)則。特別是,一旦部署了智能合約,它的功能總是相同的——它不能被不法分子修改或控制。

          因此,智能合約是運行金融應(yīng)用程序的理想選擇——它們可以作為獨立參與者以有保證的、可重復(fù)的方式接收或發(fā)送加密貨幣。

          真實世界的例子

          好的,但是有哪些現(xiàn)實世界的工具可以被智能合約取代的例子呢?

          • ? 金融工具:通常,當(dāng)您在線交易股票或貨幣時,您需要第三方在交易發(fā)生時將這兩種資產(chǎn)托管在托管中 - 例如股票經(jīng)紀(jì)人。智能合約可以充當(dāng)?shù)谌剑试S在沒有中間人的情況下進行交易。
          • ? 財產(chǎn)所有權(quán): 與法律文件相比,智能合約幾乎是即時執(zhí)行的,可以公開訪問,并且可以允許分散所有權(quán)。
          • ? 構(gòu)建額外的代幣: 令人難以置信的是,你實際上可以在以太坊上啟動新的代幣系統(tǒng),例如 Tether 或 Chainlink。同樣,您可以使用智能合約啟動 NFT 項目,例如 Bored Apes 或 CryptoPunks。

          還有很多很多。事實上,最終可以使用區(qū)塊鏈重新設(shè)計哪些系統(tǒng),我們可能仍然只是接觸到了皮毛。

          智能合約的特征

          哪些特征使智能合約能夠徹底改變或取代現(xiàn)有的技術(shù)模型?與傳統(tǒng)編程語言不同,智能合約具有以下屬性:

          • ? 透明度:智能合約發(fā)布到區(qū)塊鏈,任何有權(quán)訪問區(qū)塊鏈的人都可以讀寫。
          • ? 簡單性:由于智能合約部署到區(qū)塊鏈上的成本很高,并且包含指示金融交易流程的敏感邏輯,因此它們往往比大多數(shù)代碼庫更小更簡單。
          • ? 不變性:一旦部署了智能合約,它(通常)就不能被修改,并且無論何時調(diào)用都保證其功能相同!這使得智能合約可以作為可靠、受信任的第三方運行——因為沒有個人控制智能合約,它可以充當(dāng)金融中介、值得信賴的自動化做市商,或者通過保證公正性而發(fā)揮更多作用。

          部署后,這些智能合約表現(xiàn)為完全透明但可以包含復(fù)雜邏輯的獨立參與者。因此,在以太坊上擁有賬戶的不僅是人類用戶,還有兩種類型的賬戶:

          • ? 由人類用戶管理的外部擁有的帳戶(EOA)。
          • ? 由其底層智能合約代碼管理的合約賬戶。

          EOA 和合約賬戶有什么區(qū)別?

          令人印象深刻的是,這兩種類型的帳戶可以做基本相同的事情!這兩種賬戶類型都可以:

          ? 接收或發(fā)送可替代代幣(以太幣)到任何賬戶? 接收或發(fā)送不可替代的代幣(加密貓)到任何賬戶? 觸發(fā)另一個合約賬戶——允許一個智能合約運行其他智能合約。? 生成新的智能合約——讓智能合約充當(dāng)合約工廠!

          但是,合約賬戶有一些限制:

          ? 合約賬戶不能自行實例化操作——它們只能響應(yīng)他們收到的交易(通常來自 EOA)。? 合約賬戶完全由其代碼控制,而 EOA 則由其關(guān)聯(lián)的私鑰控制。

          2、部署您的第一個智能合約

          如果您是區(qū)塊鏈開發(fā)的新手并且不知道從哪里開始,或者您只是想了解如何部署智能合約并與之交互,那么本指南適合您。我們將使用虛擬錢包( Metamask[7] )、Solidity[8]Hardhat[9]Alchemy[10]在 Goerli 測試網(wǎng)絡(luò)上創(chuàng)建和部署一個簡單的智能合約(如果你還不明白這意味著什么,請不要擔(dān)心,我們會解釋一下!)。

          創(chuàng)建和部署您的智能合約

          第 1 步:連接到以太坊網(wǎng)絡(luò)

          有很多方法可以向以太坊鏈發(fā)出請求。為簡單起見,我們將在 Alchemy 上使用免費帳戶,這是一個區(qū)塊鏈開發(fā)平臺和 API,允許我們與以太坊鏈進行通信,而無需運行我們自己的節(jié)點。該平臺還具有用于監(jiān)視和分析的開發(fā)人員工具,我們將在本教程中利用這些工具來了解我們的智能合約部署中的幕后情況。

          如果您還沒有 Alchemy 帳戶,請在此處免費注冊。[11]

          第 2 步:創(chuàng)建您的應(yīng)用(和 API 密鑰)

          創(chuàng)建 Alchemy 帳戶后,您可以通過創(chuàng)建應(yīng)用程序來生成 API 密鑰。這將允許我們向 Goerli 測試網(wǎng)絡(luò)發(fā)出請求。如果您不熟悉測試網(wǎng),請查看本指南[12]

          將鼠標(biāo)懸停在導(dǎo)航欄中的“應(yīng)用程序”上并單擊“創(chuàng)建應(yīng)用程序”,導(dǎo)航到 Alchemy 儀表板中的“創(chuàng)建應(yīng)用程序”頁面。

          將您的應(yīng)用命名為“Hello World”,提供簡短描述,為環(huán)境選擇“Staging”(用于您的應(yīng)用記賬),然后為您的網(wǎng)絡(luò)選擇“Goerli”。

          仔細(xì)檢查您是否選擇了 Goerli 測試網(wǎng)!

          點擊“創(chuàng)建應(yīng)用程序”,就是這樣!您的應(yīng)用程序應(yīng)顯示在下表中。

          第3步:創(chuàng)建以太坊賬戶(地址)

          我們需要一個以太坊賬戶來發(fā)送和接收交易。在本教程中,我們將使用 Metamask,這是瀏覽器中的一個虛擬錢包,用于管理您的以太坊賬戶地址。如果你想了解更多關(guān)于以太坊交易如何運作的信息,請查看以太坊基金會的這個頁面[13]

          您可以在此處[14]免費下載和創(chuàng)建 Metamask 帳戶。當(dāng)您正在創(chuàng)建一個帳戶時,或者如果您已經(jīng)有一個帳戶,請確保切換到右上角的“Goerli 測試網(wǎng)絡(luò)”(這樣我們就不會處理真錢)。

          第 4 步:從水龍頭中添加以太

          為了將我們的智能合約部署到測試網(wǎng)絡(luò),我們需要一些虛假的 Eth。要獲取 Eth,您可以前往Goerli 水龍頭[15]并輸入您的 Goerli 帳戶地址,然后單擊“Send Me Eth”。由于網(wǎng)絡(luò)流量,可能需要一些時間才能收到您的虛假 Eth。(在撰寫本文時,大約需要 30 分鐘。)不久之后,您應(yīng)該會在您的 Metamask 帳戶中看到 Eth!

          第 5 步:檢查您的余額

          為了仔細(xì)檢查我們的余額,讓我們使用Alchemy 的 composer tool發(fā)出一個[16]eth_getBalance[17]請求。這將返回我們錢包中的 Eth 數(shù)量。查看此視頻[18]以獲取有關(guān)如何使用作曲家工具的說明!

          輸入您的 Metamask 帳戶地址并單擊“發(fā)送請求”后,您應(yīng)該會看到如下所示的響應(yīng):

          {"jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000"}

          注意:這個結(jié)果是 wei 而不是 eth。魏被用作以太的最小面額。wei到eth的換算為:1 eth = 10^18 wei。因此,如果我們將 0x2B5E3AF16B1880000 轉(zhuǎn)換為十進制,我們會得到 5*10^18,它等于 5 eth。呸!我們的假錢就在那里。

          第6步:初始化我們的項目

          mkdir hello-world
          cd hello-world

          首先,我們需要為我們的項目創(chuàng)建一個文件夾。導(dǎo)航到您的命令行[19]并鍵入:

          現(xiàn)在我們在項目文件夾中,我們將使用 npm init 來初始化項目。如果您還沒有安裝 npm,請按照這些說明進行操作[20](我們還需要 Node.js,所以也下載它!)。

          npm init # (or npm init --yes)

          您如何回答安裝問題并不重要,以下是我們的做法以供參考:

          package name: (hello-world)
          version: (1.0.0)
          description: hello world smart contract
          entry point: (index.js)
          test command:
          git repository:
          keywords:
          author:
          license: (ISC)
          
          About to write to /Users/.../.../.../hello-world/package.json:
          
          {
             "name": "hello-world",
             "version": "1.0.0",
             "description": "hello world smart contract",
             "main": "index.js",
             "scripts": {
                "test": "echo \"Error: no test specified\" && exit 1"
             },
             "author": "",
             "license": "ISC"
          }

          批準(zhǔn) package.json,我們就可以開始了!

          第7步:下載hardhat[21]

          Hardhat 是一個用于編譯、部署、測試和調(diào)試以太坊軟件的開發(fā)環(huán)境。在部署到實時鏈之前,它可以幫助開發(fā)人員在本地構(gòu)建智能合約和 dApp。

          在我們的hello-world項目內(nèi)部運行:

          npm install --save-dev hardhat

          查看此頁面以獲取有關(guān)安裝說明[22]的更多詳細(xì)信息。

          第8步:創(chuàng)建hardhat項目

          在我們的hello-world項目文件夾中,運行:

          npx hardhat

          然后,您應(yīng)該會看到一條歡迎消息和用于選擇您想要執(zhí)行的操作的選項。選擇“創(chuàng)建一個空的 hardhat.config.js”:

          888    888                      888 888               888
          888    888                      888 888               888
          888    888                      888 888               888
          8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
          888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
          888    888 .d888888 888    888  888 888  888 .d888888 888
          888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
          888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888
          
           Welcome to Hardhat v2.0.11 ?
          
          What do you want to do? …
          Create a sample project
          ? Create an empty hardhat.config.js
          Quit

          這將為我們生成一個hardhat.config.js文件,我們將在其中指定項目的所有設(shè)置(在第 13 步中)。

          第9步:添加項目文件夾

          為了讓我們的項目井井有條,我們將創(chuàng)建兩個新文件夾。在命令行中導(dǎo)航到 hello-world 項目的根目錄并鍵入

          mkdir contracts
          mkdir scripts

          contracts/是我們保存 hello world 智能合約代碼文件的地方

          scripts/是我們將保留腳本以部署和與我們的合約交互的地方

          第10步:編寫我們的合同

          您可能會問自己,我們到底什么時候要編寫代碼?好吧,我們到了,第 10 步

          在您喜歡的編輯器中打開 hello-world 項目(我們喜歡VSCode[23])。智能合約是用一種稱為 Solidity 的語言編寫的,我們將使用它來編寫我們的 HelloWorld.sol 智能合約。?

          1. 1. 導(dǎo)航到“contracts”文件夾并創(chuàng)建一個名為 HelloWorld.sol 的新文件
          2. 2. 下面是我們將在本教程中使用的來自以太坊基金會[24]的 Hello World 智能合約示例。將以下內(nèi)容復(fù)制并粘貼到您的 HelloWorld.sol 文件中,并確保閱讀注釋以了解此合約的作用:
          // Specifies the version of Solidity, using semantic versioning.
          // Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
          pragma solidity >=0.7.3;
          
          // Defines a contract named `HelloWorld`.
          // A contract is a collection of functions and data (its state). Once deployed, a contract resides at a specific address on the Ethereum blockchain. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
          contract HelloWorld {
          
             //Emitted when update function is called
             //Smart contract events are a way for your contract to communicate that something happened on the blockchain to your app front-end, which can be 'listening' for certain events and take action when they happen.
             event UpdatedMessages(string oldStr, string newStr);
          
             // Declares a state variable `message` of type `string`.
             // State variables are variables whose values are permanently stored in contract storage. The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value.
             string public message;
          
             // Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation.
             // Constructors are used to initialize the contract's data. Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
             constructor(string memory initMessage) {
          
                // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable).
                message = initMessage;
             }
          
             // A public function that accepts a string argument and updates the `message` storage variable.
             function update(string memory newMessage) public {
                string memory oldMsg = message;
                message = newMessage;
                emit UpdatedMessages(oldMsg, newMessage);
             }
          }

          這是一個超級簡單的智能合約,它在創(chuàng)建時存儲一條消息,并且可以通過調(diào)用update函數(shù)來更新。

          第11步:將 Metamask 和 Alchemy 連接到您的項目

          我們已經(jīng)創(chuàng)建了一個 Metamask 錢包、Alchemy 賬戶,并編寫了我們的智能合約,現(xiàn)在是時候連接這三者了。

          從您的虛擬錢包發(fā)送的每筆交易都需要使用您唯一的私鑰進行簽名。為了向我們的程序提供此權(quán)限,我們可以將我們的私鑰(和 Alchemy API 密鑰)安全地存儲在環(huán)境文件中。

          要了解有關(guān)發(fā)送交易的更多信息,請查看有關(guān)使用 web3 發(fā)送交易的教程。[25]

          首先,在你的項目目錄中安裝 dotenv 包:

          npm install dotenv --save

          這是一個超級簡單的智能合約,它在創(chuàng)建時存儲一條消息,并且可以通過調(diào)用update函數(shù)來更新。

          您的環(huán)境文件必須命名為 .env 否則將不會被識別為環(huán)境文件。請勿將其命名為 process.env 或 .env-custom 或其他任何名稱。

          • ? 按照這些說明[26]導(dǎo)出您的私鑰
          • ? 請參閱下文以獲取 HTTP Alchemy API URL

          你的.env應(yīng)該是這樣的:

          API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key"
          PRIVATE_KEY = "your-metamask-private-key"

          為了將這些實際連接到我們的代碼,我們將在第 13 步的hardhat.config.js文件中引用這些變量。

          第12步:安裝 Ethers.js

          Ethers.js 是一個庫,它通過使用更用戶友好的方法包裝標(biāo)準(zhǔn) JSON-RPC 方法,使交互和向以太坊發(fā)出請求變得更加容易。[27]

          Hardhat 使集成插件[28]變得非常容易,以獲得額外的工具和擴展功能。我們將利用Ethers 插件[29]進行合約部署(Ethers.js[30]有一些超級干凈的合約部署方法)。

          在您的項目目錄類型中:

          npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

          在下一步中,我們還將在我們的hardhat.config.js中請求以太坊。

          第13步:更新 hardhat.config.js

          到目前為止,我們已經(jīng)添加了幾個依賴項和插件,現(xiàn)在我們需要更新 hardhat.config.js 以便我們的項目了解所有這些。

          更新你的hardhat.config.js,使其看起來像這樣。:

          /**
          * @type import('hardhat/config').HardhatUserConfig
          */
          
          require('dotenv').config();
          require("@nomiclabs/hardhat-ethers");
          
          const { API_URL, PRIVATE_KEY } = process.env;
          
          module.exports = {
             solidity: "0.7.3",
             defaultNetwork: "goerli",
             networks: {
                hardhat: {},
                goerli: {
                   url: API_URL,
                   accounts: [`0x${PRIVATE_KEY}`]
                }
             },
          }

          第14步:編譯我們的合約

          為了確保到目前為止一切正常,讓我們編譯我們的合約。編譯任務(wù)是內(nèi)置hardhat任務(wù)之一。

          從命令行運行:

          npx hardhat compile

          您可能會收到關(guān)于SPDX license identifier not provided in source file 的警告,但無需擔(dān)心——希望其他一切看起來都不錯!

          如果沒有,您可以隨時在Alchemy discord[31]中留言。

          第15步:編寫我們的部署腳本

          現(xiàn)在我們的合約已經(jīng)寫好并且我們的配置文件已經(jīng)準(zhǔn)備好了,是時候編寫我們的合約部署腳本了。

          導(dǎo)航到/scripts文件夾并創(chuàng)建一個名為deploy.js的新文件 ,向其中添加以下內(nèi)容:

          async function main() {
             const HelloWorld = await ethers.getContractFactory("HelloWorld");
          
             // Start deployment, returning a promise that resolves to a contract object
             const hello_world = await HelloWorld.deploy("Hello World!");
             console.log("Contract deployed to address:", hello_world.address);
          }
          
          main()
            .then(() => process.exit(0))
            .catch(error => {
              console.error(error);
              process.exit(1);
            });

          Hardhat 在他們的合同教程[32]中解釋了每行代碼的作用,我們在這里采用了他們的解釋。

          const HelloWorld = await ethers.getContractFactory("HelloWorld");

          在ethers.js中,ContractFactory是一個用于部署新的智能合約的抽象概念,所以這里的HelloWorld是我們hello world合約實例的工廠。當(dāng)使用hardhat-ethers插件ContractFactory和Contract時,實例被默認(rèn)連接到第一個簽名者(所有者)。

          const hello_world = await HelloWorld.deploy();

          調(diào)用a將啟動部署,并返回解析為 Contract 對象的 Promise。這是為我們的每個智能合約功能提供方法的對象。deploy()``ContractFactory

          第16步:部署我們的合約

          我們終于準(zhǔn)備好部署我們的智能合約了!導(dǎo)航到命令行并運行:

          npx hardhat run scripts/deploy.js --network goerli

          然后,您應(yīng)該會看到如下內(nèi)容:

          Contract deployed to address: 0xCAFBf889bef0617d9209Cf96f18c850e901A6D61

          請復(fù)制并粘貼此地址以將其保存在某處,因為我們將在以后的教程中使用此地址,因此您不想丟失它。

          如果我們?nèi)?/span>Goerli etherscan[33]并搜索我們的合約地址,我們應(yīng)該能夠看到它已經(jīng)成功部署。交易將如下所示:

          發(fā)件人地址應(yīng)與您的 Metamask 帳戶地址匹配,收件人地址將顯示“合同創(chuàng)建”,但如果我們點擊交易,我們將在收件人字段中看到我們的合同地址:

          恭喜!你剛剛在以太坊鏈上部署了一個智能合約

          要了解幕后發(fā)生的事情,讓我們導(dǎo)航到Alchemy 儀表板[34]中的 Explorer 選項卡。如果您有多個 Alchemy 應(yīng)用程序,請確保按應(yīng)用程序過濾并選擇“Hello World”。

          在這里,你會看到Hardhat/Ethers在我們調(diào)用deploy()函數(shù)時在引擎蓋下進行的一些JSON-RPC調(diào)用。這里有兩個重要的調(diào)用,一個是eth_sendRawTransaction,這是實際將我們的合同寫到Ropsten鏈上的請求,另一個是eth_getTransactionByHash,這是一個讀取關(guān)于我們交易的哈希值的請求(發(fā)送交易時的一個典型模式)。

          要了解有關(guān)發(fā)送交易的更多信息,請查看有關(guān)使用 Web3 發(fā)送交易[35]的教程。

          譯者注:下一篇明天到來,保持關(guān)注。

          引用鏈接

          [1] Metamask: : https://metamask.io/
          [2] Solidity: : https://docs.soliditylang.org/
          [3] Hardhat: : https://hardhat.org/
          [4] Etherscan: : https://etherscan.io/
          [5] Alchemy: : https://alchemy.com/
          [6] 以太坊虛擬機上運行的高級編程語言。: https://cypherpunks-core.github.io/ethereumbook/13evm.html
          [7] Metamask: https://metamask.io/
          [8] Solidity: https://docs.soliditylang.org/en/v0.8.0/
          [9] Hardhat: https://hardhat.org/
          [10] Alchemy: https://dashboard.alchemyapi.io/signup?referral=affiliate:df70d561-e6cf-4922-b101-e2bb27c00a15
          [11] 如果您還沒有 Alchemy 帳戶,請在此處免費注冊。: https://alchemy.com/
          [12] 本指南: https://docs.alchemyapi.io/guides/choosing-a-network
          [13] 這個頁面: https://ethereum.org/en/developers/docs/transactions/
          [14] 您可以在此處: https://metamask.io/download.html
          [15] Goerli 水龍頭: https://goerlifaucet.com/
          [16] Alchemy 的 composer tool發(fā)出一個: https://composer.alchemyapi.io/?composer_state={"network"%3A0%2C"methodName"%3A"eth_getBalance"%2C"paramValues"%3A[""%2C"latest"]}
          [17] eth_getBalance: https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance
          [18] 此視頻: https://youtu.be/r6sjRxBZJuU
          [19] 命令行: https://www.computerhope.com/jargon/c/commandi.htm
          [20] 這些說明進行操作: https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm
          [21] hardhat: https://hardhat.org/getting-started/#overview
          [22] 安裝說明: https://hardhat.org/getting-started/#overview
          [23] VSCode: https://code.visualstudio.com/
          [24] 以太坊基金會: https://ethereum.org/en/
          [25] 教程。: https://docs.alchemyapi.io/alchemy/tutorials/sending-transactions-using-web3-and-alchemy
          [26] 這些說明: https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key
          [27] 標(biāo)準(zhǔn) JSON-RPC 方法,使交互和向以太坊發(fā)出請求變得更加容易。: https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc
          [28] 插件: https://hardhat.org/plugins/
          [29] Ethers 插件: https://hardhat.org/plugins/nomiclabs-hardhat-ethers.html
          [30] Ethers.js: https://github.com/ethers-io/ethers.js/
          [31] Alchemy discord: https://discord.gg/u72VCg3
          [32] 合同教程: https://hardhat.org/tutorial/testing-contracts.html#writing-tests
          [33] Goerli etherscan: https://goerli.etherscan.io/
          [34] Alchemy 儀表板: https://dashboard.alchemyapi.io/explorer
          [35] 使用 Web3 發(fā)送交易: https://docs.alchemy.com/alchemy/tutorials/sending-txs


          主站蜘蛛池模板: 亚洲AV噜噜一区二区三区| 精品无码AV一区二区三区不卡| 视频一区二区三区免费观看| 免费日本一区二区| 国产日韩精品一区二区在线观看播放| 久久久91精品国产一区二区三区| 日韩视频一区二区| 欧美人妻一区黄a片| 精品人妻AV一区二区三区| 亚洲AV无码一区二区乱子伦| 国产色精品vr一区区三区| 日本强伦姧人妻一区二区| 怡红院美国分院一区二区| 亚洲一区在线视频| 精品亚洲AV无码一区二区| 亚洲乱码国产一区三区| 嫩B人妻精品一区二区三区| 国模吧无码一区二区三区| 国产天堂一区二区综合| 国产成人一区二区三区在线| 中文字幕在线一区二区三区| 精品亚洲一区二区三区在线观看 | 性色av闺蜜一区二区三区| 日韩一区二区视频| 日韩av片无码一区二区不卡电影 | 综合人妻久久一区二区精品 | 日日摸夜夜添一区| 在线精品亚洲一区二区| 99偷拍视频精品一区二区| 亚洲乱码一区二区三区在线观看 | 亚洲AV日韩AV一区二区三曲| 一区二区免费国产在线观看| 日韩精品乱码AV一区二区| 日本精品一区二区久久久| 99久久精品午夜一区二区| 中文字幕一区二区日产乱码| 国模一区二区三区| 麻豆AV一区二区三区久久| 亚洲熟女少妇一区二区| 视频一区在线播放| 日本一区二区三区日本免费|