主頁 >  其他 > Hardhat 開發框架 - Solidity開發教程連載

Hardhat 開發框架 - Solidity開發教程連載

2023-05-12 08:48:26 其他

Decert.me 要連載教程了, 《Solidity 開發教程》 力求系統深入的介紹 Solidity 開發, 同時這是一套互動式教程,你可以實時的修改教程里的合約代碼并運行,

本教程來自貢獻者 @Tiny熊,讓我們正式開始學習吧,

如果你已經是 Hardhat 的使用者,可以直接跳到文末,參與挑戰領取技能認證 NFT,


Hardhat 提供了一個靈活且易于使用的環境,可以輕松地撰寫、測驗和部署智能合約,類似的開發工具或框架還有: Remix IDE, Truffle , Foundry, 目前最受歡迎的是 Hardhat 與 Foundry,

Hardhat 使用 Node 進行包管理,如果你熟悉 Node 及 Javascript, Hardhat 將非常簡單上手,

Hardhat還內置了Hardhat 網路(Hardhat Node),它是為開發而設計的本地以太坊網路, 用來部署合約,運行測驗和除錯代碼

在本文中,我們將介紹:

  1. 創建及配置Hardhat專案
  2. 撰寫智能合約
  3. Hardhat 編譯合約
  4. 使用 Ethers.js 和為合約撰寫自動化測驗
  5. 使用 console.log()除錯 Solidity
  6. 使用 Hardhat 部署合約
  7. 使用 Hardhat Etherscan 進行開源驗證,
  8. Hardhat 插件的使用

本文對應的代碼在:https://github.com/xilibi2003/training_camp_2/tree/main/w1_hardhat

創建及配置Hardhat專案

Hardhat 構建在Node.js之上, 使用 Hardhat 要求我們在電腦先安裝好Node.js (>= 16.0), 環境準備可以參考這里,

先創建專案目錄:

mkdir hardhat-tutorial
cd hardhat-tutorial

初始化 Node 專案:

npm init

安裝 Hardhat :

npm install --save-dev hardhat

在安裝Hardhat的目錄下運行:

npx hardhat

使用鍵盤選擇"創建一個新的hardhat.config.js(Create a JavaScript project)" ,然后回車,

$ npx hardhat
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.13.0 ???

? What do you want to do? …
? Create a JavaScript project
  Create a TypeScript project
  Create an empty hardhat.config.js
  Quit

這個 JavaScript Hardhat 工程會默認下載 hardhat-toolbox 插件及一些常規設定:

創建好的Hardhat工程包含檔案有:

  • contracts:智能合約目錄
  • scripts :部署腳本檔案
  • test:智能合約測驗用例檔案夾,
  • hardhat.config.js:組態檔,配置hardhat連接的網路及編譯選項,

撰寫合約

合約開發推薦使用 VSCode 編輯器 + solidity 插件,在contracts 下新建一個合約檔案 Counter.sol (*.sol 是 Solidity 合約檔案的后綴名), 復制如下代碼:

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Counter {
    uint counter;

    constructor() {
        counter = 0;
    }

    function count() public {
        counter = counter + 1;
    }

    function get() public view returns (uint) {
        return counter;
    }
}

接下來就可以編譯這個合約了,

使用OpenZepplin 等第三方庫

在撰寫合約時,盡量不要重復造輪子,基于優質開源的第三方庫,不僅可以提交效率,還可以讓我們的合約代碼更安全,例如要開發一個 Token,可以用npm 安裝OpenZepplin 庫:

npm install @openzeppelin/contracts --save-dev

然后在合約中 import 相應庫中的合約檔案及可,

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract Token is ERC20 {
  constructor(uint256 initialSupply) ERC20("Token Name", "Token Symbol") {
    _mint(msg.sender, initialSupply);
  }
}

編譯合約

hardhat.config.js 有默認的Solidity 編譯器配置:

require("@nomicfoundation/hardhat-toolbox");

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.18",
};

因此我們直接編譯合約即可,在終端中運行 npx hardhat compilecompile任務是內置任務之一,

$ npx hardhat compile
Compiling 1 file with 0.8.18
Compilation finished successfully

合約已成功編譯了,

成功編譯后,會在 artifacts/contracts/ 目錄下生成Counter.json 和 build-info, Counter.json包含了智能合約的 ABI 、位元組碼(Bytecode)等,

:::tip

智能合約的 ABI(Application Binary Interface)資訊,其中包括了合約的函式、事件等介面資訊,這個檔案通常會在與其他合約互動時使用,因為它可以被其他合約和 DApp 使用,

Bytecode 是部署合約所需的位元組碼(也稱為創建時位元組碼),部署合約時,就是把該位元組碼作為交易的輸入資料發送鏈上,:::

:::

撰寫測驗用例

為智能合約撰寫自動化測驗至關重要,因為事關用戶資金,

在我們的測驗中,使用 Harhdat 內置的網路,使用ethers.js與前面的合約進行互動,并使用 Mocha 作為測驗運行器,

在專案 test下,并創建一個名為Counter.js的新檔案:

const { ethers } = require("hardhat");
const { expect } = require("chai");

let counter;

describe("Counter", function () {
  async function init() {
    const [owner, otherAccount] = await ethers.getSigners();
    const Counter = await ethers.getContractFactory("Counter");
    counter = await Counter.deploy();
    await counter.deployed();
    console.log("counter:" + counter.address);
  }

  before(async function () {
    await init();
  });

  // 
  it("init equal 0", async function () {
    expect(await counter.get()).to.equal(0);
  });

  it("add 1 equal 1", async function () {
    let tx = await counter.count();
    await tx.wait();
    expect(await counter.get()).to.equal(1);
  });

});

在終端上運行npx hardhat test, 你應該看到以下輸出:

> npx hardhat test


  Counter
counter:0x5FbDB2315678afecb367f032d93F642f64180aa3
    ? init equal 0
    ? add 1 equal 1

  2 passing (1s)

這意味著測驗通過了, 現在我們解釋主要代碼:

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

ethers.js中的ContractFactory是用于部署新智能合約的抽象,因此此處的Counter是用來實體合約的工廠,

counter = await Counter.deploy();

ContractFactory上呼叫deploy()將啟動部署,并回傳決議為ContractPromise, 該物件包含了智能合約所有函式的方法,

let tx = await counter.count();
await tx.wait();

counter 上呼叫合約方法, 并等待交易執行完畢,

注意,默認情況下, ContractFactoryContract實體連接到第一個簽名者(Singer),

若需要使用其他的簽名這, 可以使用合約實體connect 到另一個簽名者, 如 counter.connect(otherAccount)

expect(await counter.get()).to.equal(0);

判斷相等,我們使用Chai,這是一個斷言庫, 這些斷言函式稱為“匹配器”,在此實際上使用的“匹配器”來自Hardhat Chai Matchers,

使用 Console.log 除錯合約

在**Hardhat Node **節點上運行合約和測驗時,你可以在Solidity代碼中呼叫console.log()列印日志資訊和合約變數,可以方便我們除錯代碼,

在合約代碼中匯入**Hardhat **的console.log就可以使用它,

pragma solidity ^0.8.0;

import "hardhat/console.sol";

contract Counter {
    uint public counter;

    constructor(uint x) {
        counter = x;
    }

    function count() public {
        counter = counter + 1;
        console.log("counter is %s ", counter);
    }

}

就像在JavaScript中使用一樣, 將一些console.log添加函式中,運行測驗時,將輸出日志記錄:

> npx hardhat test

  Counter
counter:0x5FbDB2315678afecb367f032d93F642f64180aa3
    ? init equal 0
counter is 1
    ? add 1 equal 1 (38ms)


  2 passing (1s)

可以在這里了解更多 console.log ,

部署合約

其實我們在測驗時, 合約已經部署到了Hardhat 內置的網路上,部署合約我們需要撰寫一個部署腳本,

scripts檔案夾,新建一個deploy.js 用來寫部署腳本,部署腳本其實和前面測驗時 init 函式類似:

const { ethers } = require("hardhat");

async function main() {

   const Counter = await ethers.getContractFactory("Counter");
   const counter = await Counter.deploy();
   await counter.deployed();

  console.log("Counter address:", counter.address);
}

main();

運行 npx hardhat run scripts/deploy.js 時, 可以合約會部署到Hardhat 內置網路上,

> npx hardhat run scripts/deploy.js
Counter address: 0x5FbDB2315678afecb367f032d93F642f64180aa3

為了在運行任何任務時指示Hardhat連接到特定的EVM網路,可以使用--network引數, 像這樣:

npx hardhat run scripts/deploy.js --network <network-name>

network-name 需要在 hardhat.config.js 檔案中進行配置:

require("@nomicfoundation/hardhat-toolbox");

// 填入自己的私鑰或助記詞,
const PRIVATE_KEY1 = "0x.... YOUR PRIVATE KEY1";
const PRIVATE_KEY2 = "0x....  YOUR PRIVATE KEY1";
const Mnemonic = "YOUR Mnemonic";


module.exports = {
  solidity: "0.8.9", // solidity的編譯版本
  networks: {
    goerli: {
      url: "https://eth-goerli.api.onfinality.io/public",
      accounts: [PRIVATE_KEY1,PRIVATE_KEY2],
      chainId: 5,
    },
    
     mumbai: {
      url: "https://endpoints.omniatech.io/v1/matic/mumbai/public",
      accounts: {
        mnemonic: Mnemonic,
      },
      chainId: 80001,
    },
  }
};

以上配置了兩個網路,一個是以太坊測驗網 goerli, 一個是 Polygon 測驗網mumbai, 我們可以在 https://chainlist.org 找到每個網路的節點 URL 及 chainID,

在網路配置中,需要提供提交交易賬號, 可以通過私鑰或助記詞 進行配置,這里配置的賬號(需要提前充幣進入到賬號中),在hardhat 腳本中(測驗及部署腳本)呼叫getSigners 即可獲得:

const [owner, otherAccount] = await ethers.getSigners();

一個私鑰對應一個Singer,助記詞則對應無數個 Singer , 為每個專案生成一個獨立的賬號是比較推薦的做法,使用 ChainTool 開源工具 可以生成賬號,

:::tip

助記詞可以推匯出無數了私鑰,可參考:BIP39

:::

另外要注意, 在 Goerli 上進行部署,需要將Goerli-ETH發送到將要進行部署的地址中, 可以從水龍頭免費或一些測驗幣,這是Goerli的一個水龍頭:

  • Alchemy Goerli Faucet

最后運行:

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

如果一切順利,你應該看到已部署的合約地址,

代碼開源驗證

智能代碼開源會增加了合約的透明度和可靠性,是專案建立信任很重要的一個步驟,

hardhat-toolbox 工具箱里,包含了 hardhat-etherscan 插件用于驗證已經部署到區塊鏈網路上的智能合約代碼與源代碼是否匹配,在完成驗證后在區塊鏈瀏覽器中合約標簽上會出現?, 如圖:

image-20230313104044517

在部署智能合約時,合約位元組碼會被寫入到區塊鏈中,這意味著其他人無法檢查合約的源代碼,代碼驗證的程序是將已部署合約的位元組碼與原始Solidity代碼再次編譯后與部署的位元組碼進行比較,確保它們是一致的,

相比在區塊鏈瀏覽器上上傳代碼驗證, hardhat-etherscan 有很多優點,否則會自動使用 hardhat config 值設定的編譯器選項,并且當代碼中參考的第三方庫或合約, hardhat-etherscan 能自動探測并處理,

開源驗證的步驟是:

  1. 安裝 hardhat-toolboxhardhat-etherscan , 這一步我們這里已經完成,因為在初始化專案的時候安裝了 hardhat-toolbox , 如果沒有安裝,可以使用以下命令安裝

    npm install --save-dev @nomiclabs/hardhat-etherscan
    
  2. hardhat.config.js 中配置您的 Etherscan API 密鑰和網路設定,例如:

  require("@nomicfoundation/hardhat-toolbox");
  或
  // require("@nomiclabs/hardhat-etherscan");
  
  etherscan: {
    apiKey: ""
  },
  
 

如何獲取 Etherscan API 密鑰?

  1. 訪問部署網路對應主網的 Etherscan 網站,并注冊一個賬號(如果還沒有賬號的話),
  2. 登錄你的賬號并進入 Etherscan 的「我的帳戶」頁面,
  3. 點擊頁面左側的「API-KEYs」標簽頁,
  4. 在頁面上方的「Create New API KEY」部分,輸入 API 密鑰的名稱和描述,然后選擇需要訪問的 API 權限,
  5. 點擊「Generate」按鈕來生成 API 密鑰,
  1. 執行驗證命令:

    npx hardhat verify <deployed-contract-address> "引數(若有)" --network <network-name> 
    

    例如,要在 goerli 網路上驗證合約,可以運行以下命令:

    npx hardhat verify 0x..... --network goerli
    

該命令會為我們上傳合約代碼并驗證其源代碼,如果一切順利(網路順暢的話),在 Etherscan 上看到的合約被成功驗證,

Hardhat 插件(Plugin)的使用

上面代碼開源驗證時,使用了hardhat-etherscan插件,其實也可以使用 hardhat-verify 插件,

在 https://hardhat.org/hardhat-runner/plugins 鏈接可以找到當前使用較多的插件,例如:hardhat-gas-reporter 可以對部署合約及函式執行的Gas消耗給出報告;solidity-coverage 可以對測驗覆寫率給出報告,

要使用一個插件通常要:

  1. 用 Node.js 包管理先安裝相應的插件

  2. hardhat.config.js 檔案中引入插件,以便Hardhat 能加載上對應的插件,

參考檔案

示例非常簡單, 更多使用方法,可參考檔案:

  • Hardhat 官方檔案:https://hardhat.org/getting-started/

  • Hardhat 中文檔案:https://learnblockchain.cn/docs/hardhat/getting-started/

  • Harhdat 入門教程:https://learnblockchain.cn/docs/hardhat/tutorial/

  • Ethers.js 檔案:https://learnblockchain.cn/ethers_v5/

小結

本文介紹了 Hardhat 開發框架的一些基本概念和使用方法,了解了如何使用 Hardhat 進行合約編譯、部署、除錯及測驗,在開發中要經常查看檔案,了解更多Hardhat 用法,


Hardhat 的使用你掌握了嗎?來這里挑戰一下看看,挑戰完成你就可以領取到一枚技能認證 NFT,

碼一個未來


原教程鏈接:https://decert.me/tutorial/solidity/tools/hardhat
Decert.me -- 碼一個未來

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/552230.html

標籤:其他

上一篇:Grafana系列-統一展示-6-Zabbix儀表板

下一篇:返回列表

標籤雲
其他(158870) Python(38128) JavaScript(25413) Java(18033) C(15226) 區塊鏈(8265) C#(7972) AI(7469) 爪哇(7425) MySQL(7177) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5338) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4570) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1972) 功能(1967) Web開發(1951) HtmlCss(1935) python-3.x(1918) C++(1915) 弹簧靴(1913) xml(1889) PostgreSQL(1875) .NETCore(1860) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • Hardhat 開發框架 - Solidity開發教程連載

    Decert.me 要連載教程了, 《Solidity 開發教程》 力求系統、深入的介紹 Solidity 開發, 同時這是一套互動式教程,你可以實時的修改教程里的合約代碼并運行。 本教程來自貢獻者 @Tiny熊,讓我們正式開始學習吧。 如果你已經是 Hardhat 的使用者,可以直接跳到文末,參與 ......

    uj5u.com 2023-05-12 08:48:26 more
  • Grafana系列-統一展示-6-Zabbix儀表板

    系列文章 Grafana 系列文章 📝Notes: 關于 Grafana系列-統一展示-6-Zabbix 資料源, 其實已經在之前的文章: 使用 Grafana 統一監控展示 - 對接 Zabbix 里詳細介紹過了, 感興趣的請移步閱讀. 知識儲備 一個圖表上的多個 Items 我們可以在 met ......

    uj5u.com 2023-05-12 08:48:00 more
  • 在Bamboo上怎么使用iOS的單元測驗

    本教程將使用北汽登錄模塊為例,一步一步和大家一起搭建單元測驗用例,并在Bamboo上跑起來,最終測驗結果和代碼覆寫率會Bamboo上匯總。 ......

    uj5u.com 2023-05-12 08:47:48 more
  • Django SQL注入漏洞分析(CVE-2022-28346)

    Django 在2022年發布的安全更新,修復了在 QuerySet 的 annotate(), aggregate(), extra() 等函式中存在的 SQL 注入漏洞。 ......

    uj5u.com 2023-05-12 08:47:06 more
  • IntelliJ IDEA 最新激活碼:2023、2022及以下版本通用(親測有效)

    IntelliJ IDEA 2023版正式發布了。如何破解和激活IDEA呢?本文提供簡單易懂的破解和激活指南,幫助你全面有效的解鎖IDEA工具,不在受限于 IDEA 30天試用期。本文適用于 IDEA 2023, 2022及以下版本。IDEA最新激活碼,IDEA2023激活碼,一步到位,永久激活,親... ......

    uj5u.com 2023-05-12 08:40:35 more
  • pxe基礎的批量化裝機

    PXE網路裝機 PXE 原理 開機自檢 》MBR引導 》grub2選單 》內核初始化 》init初始化 服務器的批量部署 1.規模化:同時裝配多臺服務器 2.自動化:安裝系統、配置各種服務 3.遠程實作:不需要光碟、U盤等安裝介質 4.對于無盤作業站,服務器端需要提供可運行的完整系統鏡像;對于遠程安 ......

    uj5u.com 2023-05-12 08:34:57 more
  • 谷歌I/O大會重磅發布:Bard編碼能力優化后仍不支持中文,開發者選擇C

    谷歌I/O大會今天凌晨發布,打出系列AI組合拳。除了發布升級版語言模型PaLM2之外,Bard能力也要起飛。 憑借改進的數學、邏輯和推理技能,Bard 現在可以幫助生成、解釋和除錯 20 多種編程語言的代碼,開發者們需要輸入prompt,來得到完整的代碼片段。 Bard提供的代碼參考功能,在提供代碼 ......

    uj5u.com 2023-05-12 08:34:30 more
  • 百度飛槳(PaddlePaddle)- 張量(Tensor)

    張量(Tensor)、標量(scalar)、向量(vector)、矩陣(matrix) 飛槳 使用張量(Tensor) 來表示神經網路中傳遞的資料,Tensor 可以理解為多維陣列,類似于 Numpy 陣列(ndarray) 的概念。與 Numpy 陣列相比,Tensor 除了支持運行在 CPU 上 ......

    uj5u.com 2023-05-12 08:34:15 more
  • 構建萬物互聯,華為云IoT+鴻蒙重燃物體感知

    摘要:鴻蒙的出現,讓硬體、軟體行業面臨著變革與重構的洪流,但激流勇進中,也潛藏著巨大機遇。物聯網設備與鴻蒙結合成為必然趨勢,本文將解讀華為云IoT+鴻蒙如何強強聯合,為物聯網行業提供新的思路和方法。 本文分享自華為云社區《華為云IoT攜同鴻蒙打造萬物智聯新機遇》,作者:華為云IoT DTSE團隊。 ......

    uj5u.com 2023-05-12 08:34:00 more
  • SemiEng20230413-What Designers Need To Know About GAA

    Nanowire與nanosheet爭議仍然存在,業界還沒確定誰更適合作下一代主流邏輯器件。 對任何新器件,第一代都是用來學習試驗的,后面再迭代升級。 FinFET不能繼續縮微的原因:fin之間要填柵和功函式堆疊層,fin之間15-20nm的距離是必要的。“So, you have this cli ......

    uj5u.com 2023-05-12 08:27:58 more