【Web3 开发系列教程—创建你的第一个智能合约(2)】部署第一个智能合约

如果你是区块链开发的新手并且不知道从哪里开始,或者你只是想了解如何部署智能合约并与之交互,那么本指南适合你。 我们将介绍使用虚拟钱包 (Metamask)、Solidity、Hardhat 和 Alchemy 在 Goerli 测试网络上创建和部署一个简单的智能合约(如果你还不明白其中的任何含义,请不要担心,我们将 解释一下!)。

创建和部署智能合约

第 1 步:连接到以太坊网络

有很多方法可以向以太坊链发出请求。 为简单起见,我们将在 Alchemy 上使用免费帐户(如果你还没有 Alchemy 帐户,请点击在此处免费注册),这是一个区块链开发平台和 API,允许我们与以太坊链进行通信,而无需运行我们自己的节点。 该平台还具有用于监视和分析的开发人员工具,我们将在本教程中利用这些工具来了解我们的智能合约部署中的幕后情况。

第 2 步:创建应用和 API 密钥

创建 Alchemy 帐户后,你可以通过创建应用程序来生成 API 密钥。 这将允许我们向 Goerli 测试网络发出请求。 如果你不熟悉测试网,请查看官方给出的指南。

image.png

将鼠标悬停在导航栏中的“应用程序”上并单击“创建应用程序”,导航到 Alchemy 仪表板中的“创建应用程序”页面:

image.png

将你的应用命名为“Hello World”,提供简短描述,为环境选择“Staging”(用于你的应用记账),然后为你的网络选择“Goerli”。
image.png
仔细检查你是否选择了 Goerli 测试网!

点击“创建应用程序”,就是这样! 你的应用程序应显示在下表中。

第 3 步:创建以太坊账户(地址)

我们需要一个以太坊账户来发送和接收交易。 在本教程中,我们将使用 Metamask,这是浏览器中的一个虚拟钱包,用于管理你的以太坊账户地址。 如果你想了解更多关于以太坊交易如何运作的信息,请查看以太坊基金会的这个页面。

你可以在此处免费下载和创建 Metamask 帐户。 当你正在创建帐户时,或者如果你已经有帐户,请确保切换到右上角的“Goerli 测试网络”(这样我们就不会处理真钱)。
image.png

第 4 步:从 Faucet 中添加 ether

为了将我们的智能合约部署到测试网络,我们需要一些虚假的 Eth。 要获取 Eth,你可以前往 Goerli 水龙头并输入你的 Goerli 帐户地址,然后单击“Send Me Eth”。 由于网络流量,可能需要一些时间才能收到你的虚假 Eth。 (在撰写本文时,大约需要 30 分钟。)不久之后,你应该会在你的 Metamask 帐户中看到 Eth!

第 5 步:检查余额

为了仔细检查我们的余额,让我们使用 Alchemy 的 composer 工具发出一个 eth_getBalance 请求。 这将返回我们钱包中的 Eth 数量。
image.png
输入你的 Metamask 帐户地址并单击“发送请求”后,应该会看到如下所示的响应:

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

注意:这个结果是 wei 而不是 eth。 魏被用作以太的最小面额。 wei到eth的换算为:1 eth = 10^18 wei。 因此,如果我们将 0x2B5E3AF16B1880000 转换为十进制,我们会得到 5*10^18,它等于 5 eth。 呸! 我们的假钱就在那里🤑。

第 6 步:初始化我们的项目
mkdir hello-world
cd hello-world

首先,我们需要为我们的项目创建一个文件夹。 导航到你的命令行并键入:

现在我们在项目文件夹中,我们将使用 npm init 来初始化项目。 如果你还没有安装 npm,请按照这些说明进行操作(我们还需要 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"
}
第 7 步:下载 Hardhat

Hardhat 是一个用于编译、部署、测试和调试以太坊软件的开发环境。 在部署到实时链之前,它可以帮助开发人员在本地构建智能合约和 dApp。

在我们的 hello-world 项目中运行:

npm install --save-dev hardhat
第 8 步:创建 Hardhat 项目

在我们的 hello-world 项目文件夹中,运行:

npx hardhat

然后,你应该会看到一条欢迎消息和用于选择你想要执行的操作的选项。 选择“创建一个空的 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 文件,我们将在其中为我们的项目指定所有设置(在第 13 步中)。

第 9 步:添加项目文件夹

为了让我们的项目井井有条,我们将创建两个新文件夹。 在命令行中导航到 hello-world 项目的根目录并键入:

mkdir contracts
mkdir scripts
  • contract: 是我们保存 hello world 智能合约代码文件的地方
  • scripts: 是我们保存脚本以部署和与我们的合约交互的地方
第 10 步:编写我们的合约

你可能会问自己,我们到底什么时候要编写代码? 好吧,我们到了,第 10 步😄

在你最喜欢的编辑器中打开 hello-world 项目(我喜欢 VSCode)。 智能合约是用一种称为 Solidity 的语言编写的,我们将使用它来编写我们的 HelloWorld.sol 智能合约。‌

  1. 导航到“contracts”文件夹并创建一个名为 HelloWorld.sol 的新文件
  2. 下面是我们将在本教程中使用的来自以太坊基金会的 Hello World 智能合约示例。 将以下内容复制并粘贴到你的 HelloWorld.sol 文件中,并确保阅读注释以了解此合约的作用:
// 使用语义版本控制指定 Solidity 的版本。
// 了解更多:https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
pragma solidity >=0.7.3;

// 定义一个名为“HelloWorld”的合约。
// 合约是功能和数据(其状态)的集合。 部署后,合约将驻留在以太坊区块链上的特定地址。 了解更多:https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
contract HelloWorld {

   // 调用更新函数时发出
   // 智能合约事件是你的合约将区块链上发生的事情传达给你的应用程序前端的一种方式,它可以“监听”某些事件并在它们发生时采取行动。
   event UpdatedMessages(string oldStr, string newStr);

   // 声明一个`string`类型的状态变量`message`。
   // 状态变量是其值永久存储在合约存储中的变量。 关键字 `public` 使变量可以从合约外部访问,并创建一个函数,其他合约或客户端可以调用该函数来访问该值。
   string public message;

   // 与许多基于类的面向对象语言类似,构造函数是一种特殊函数,仅在合约创建时执行。
   // 构造函数用于初始化合约的数据。 了解更多:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
   constructor(string memory initMessage) {

      // 接受字符串参数 `initMessage` 并将值设置到合约的 `message` 存储变量中)。
      message = initMessage;
   }

   // 一个接受字符串参数并更新“消息”存储变量的公共函数。
   function update(string memory newMessage) public {
      string memory oldMsg = message;
      message = newMessage;
      emit UpdatedMessages(oldMsg, newMessage);
   }
}

这是一个超级简单的智能合约,它在创建时存储一条消息,并且可以通过调用更新函数来更新。

第 11 步:将 Metamask 和 Alchemy 连接到你的项目

我们已经创建了一个 Metamask 钱包、Alchemy 账户,并编写了我们的智能合约,现在是时候连接这三者了。

从你的虚拟钱包发送的每笔交易都需要使用你唯一的私钥进行签名。 为了向我们的程序提供此权限,我们可以将我们的私钥(和 Alchemy API 密钥)安全地存储在环境文件中。

首先,在你的项目目录中安装 dotenv 包:

npm install dotenv --save

这是一个超级简单的智能合约,它在创建时存储一条消息,并且可以通过调用更新函数来更新。

你的环境文件必须命名为 .env,否则将不会被识别为环境文件。请勿将其命名为 process.env 或 .env-custom 或其他任何名称。

你的 .env 应如下所示:

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

PRIVATE_KEY 私钥的获取方式参考这篇文章。

API_URL 的获取方式可以参考下图:

image.png

为了将这些连接到我们的代码,我们将在第 13 步的 hardhat.config.js 文件中引用这些变量。

第 12 步:安装 Ethers.js

Ethers.js 是一个库,它通过使用更友好的方法包装标准** JSON-RPC **方法,使交互和向以太坊发出请求变得更加容易。

Hardhat 使的集成插件变得非常容易,以获得额外的工具和扩展功能。 我们将利用 Ethers 插件进行合约部署(Ethers.js 有一些超级干净的合约部署方法)。
在你的项目目录的命令行中输入如下命令:

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

在下一步中,我们还需要在我们的 hardhat.config.js 中使用以太币。

第 13 步:更新 hardhat.config.js

到目前为止,我们已经添加了几个依赖项和插件,现在我们需要更新 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 步:编译我们的合约

为了确保到目前为止一切正常,让我们编译我们的合约。 编译任务是内置安 hardhat 的任务之一。

从命令行运行:

npx hardhat compile

你可能会收到有关源文件中未提供 SPDX 许可证标识符的警告,但无需担心!

第 15 步:编写我们的部署脚本

现在我们的合约已经写好并且我们的配置文件已经准备好了,是时候编写我们的合约部署脚本了。

导航到 /scripts 文件夹并创建一个名为 deploy.js 的新文件,向其中添加以下内容:

async function main() {
   const HelloWorld = await ethers.getContractFactory("HelloWorld");

   // 开始部署,返回一个解析为合约对象的 promise
   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);
  });

其中:

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

ethers.js 中的 ContractFactory 是用于部署新智能合约的抽象,因此 HelloWorld 这里是我们的 hello world 合约实例的工厂。 使用 hardhat-ethers 为 ContractFactory 和 Contract 添加插件时,实例默认连接到第一个签名者(所有者)。

const hello_world = await HelloWorld.deploy();

在 ContractFactory 上调用 deploy() 将启动部署,并返回解析为 Contract 对象的 Promise。 这是为我们的每个智能合约功能提供方法的对象。

第 16 步:部署我们的合约

我们终于准备好部署我们的智能合约了! 切换到命令行并运行:

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

然后,你应该会看到如下内容:

Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

请复制并粘贴此地址以将其保存在某处,因为我们将在以后的教程中使用此地址,因此你不想丢失它。

如果我们去 Goerli etherscan 并搜索我们的合约地址,我们应该能够看到它已经成功部署。 交易将如下所示:
image.png
发件人地址应该与你的 Metamask 帐户地址匹配,收件人地址将显示“Contract Creation”,但如果我们点击交易,我们将在收件人字段中看到我们的合同地址:
image.png

至此,恭喜你! 你已经在以太坊链上部署了一个智能合约🎉

要了解幕后发生的事情,让我们导航到 Alchemy 仪表板中的 Explorer 选项卡。 如果你有多个 Alchemy 应用程序,请确保按应用程序过滤并选择“Hello World”。
image.png
在这里,你将看到当我们调用 deploy() 函数时,Hardhat/Ethers 在后台为我们进行的一些 JSON-RPC 调用。 这里要提到的两个重要的问题是 eth_sendRawTransaction,它是实际将我们的合约写入 Ropsten 链的请求,以及 eth_getTransactionByHash,它是一个请求读取我们的交易信息给定哈希(发送交易时的典型模式)。

要了解有关发送交易的更多信息,你可以从这里查看有关使用 Web3 发送交易的教程。

六步完成智能合约部署(亲测) 本文只专注于探讨研究智能合约技术原理,仅供学习,不做其他违反相关规定的讨论。本文主要讲解了区块链智能合约的部署的步骤,纯技术文章,走了一点儿弯路。希望能给还在研究智能合约的新手入门提供一些帮助。 阅读详情

相关推荐

web3Js(干货)(多签的流程原理)看完这一篇就懂了(波场网络-请勿用于除学习外其他用途)

web3Js(干货)(多签的流程原理)看完这一篇就懂了(波场网络-请勿用于除学习外其他用途)

weixin_45047825的博客 2054

web3开发DApp项目技术入门教程(2022年最新)

2022 年最新 web3 开发入门教程,一文带你快速入门 web3.0时代。 内容包括: 1. 智能合约创建和部署 2. Solidity语言入门 3. hardhat框架使用及本地环境搭建

captxb的博客 1万+

11. 建立你的第一个Web3项目

通过本章节的实践,你已经了解了如何搭建Web3开发环境,编写和部署智能合约,以及开发一个与智能合约交互的dApp。这是Web3开发的基础技能,未来你可以在此基础上开发更复杂的去中心化应用。

sise_2022的博客 3725

扫盲系列--Web3智能合约+Solidity简介

这几天web3智能合约这个概念,频繁映入我的眼帘。web3.0这个概念我听说过,核心特征是去中心化、开放性、隐私保护和数据所有权回归个人。Web 1.0是信息浏览时代,Web 2.0是用户参与和社交网络时代,Web 3.0是去中心化与智能化时代。在Web3.0这一新的互联网架构下,用户不再仅仅是内容的消费者,更是自己数字身份和数据的拥有者。Web 3.0旨在构建一个更加透明、安全且高效的信息网络。我对Web3.0的了解是一些比较宽泛的东西,这次想比较详细的了解一下web3中的智能合约。智能合约。

CTZL123456的博客 2305

使用web3调用智能合约的简单例子

当使用Solidity语言开发完成一个智能合约并部署后,如何在一个Web应用程序(或者手机App)中调用它?使用web3.js库,可以很容易的做到这些。通过一个最简单的例子我们来看看如何做到这些,分为三个步骤。 1. 编写智能合约 简单起见,我们直接使用Remix自带的Storage.so合约l例子,就是简单的存储和获取一个整数数值。 pragma solidity >=0.4.22 <0.7.0; /** * @title Storage * @dev Store & retre

wumingzhifu的博客 9693

从后端到智能合约开发:需要多久

根据个人情况设计你的学习规划,每天坚持学习2-4小时,在6个月内掌握从智能合约开发所需的技能,并不是难事。我是田大正,一个7年全栈经验,目前已经全面转型到web3,如果你在关注区块链,web3市场,正在规划自己的转型路径,欢迎跟我私信交流,愿意与你分享我的转型经验。学习资源:React.js或Vue.js、Web3.js或Ethers.js教程。学习资源:Solidity文档、高级课程、GitHub上开源智能合约代码。学习资源:Mocha、Chai、Truffle、Hardhat教程。

Qztiandazheng的博客 2132

【Web3 开发系列教程—创建你的第一个智能合约(1)】什么是智能合约

什么是智能合约? 以太坊在 2013 年的核心创新是允许开发人员编写称为智能合约的小代码块,这些代码可以部署到以太坊网络,独立于其创建者运行。 在以太坊中,智能合约是用 Solidity 编写的,这是一种设计用于在以太坊虚拟机上运行的高级编程语言。智能合约也成为了区块链开发领域主要的研究方向之一。 智能合约是定义一组规则或“合约”的程序,当用户在区块链上调用时,它会自动执行编码规则。 特别地,一旦部署了智能合约,它就不能被修改或控制。因此,智能合约是运行金融应用程序的理想选择,它们可以作为独立参与者以有保证

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 2821

web3:智能合约浏览器版本的 IDE - remix 使用教程

Remix 是一个开源的 Solidity 智能合约开发环境,是一款浏览器版本的 IDE,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于编写智能合约。我们在上面编辑测试我们的智能合约,尤其对于新手来说是一个非常棒的编辑工具。因为官方文档内容比较多,并且是英文的,很多内容我们还不需要了解,所以这里只介绍一个常用的流程,编辑->编译->部署->测试。

鄙人kunzhi96,感恩遇见! 5387

【Web3 开发系列教程—创建你的第一个智能合约(4)】与智能合约交互

与智能合约之间的交互

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 759

Java Web3J :使用web3j调用自己的智能合约的方法(教程)

web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。可以通过它进行以太坊区块链的开发,而无需为你的应用平台编写集成代码。web3j调用智能合约是web3j使用的关键,当前区块链的核心原理其实很简单:这是智能合约优秀的框架,经过了无数安全的效验,目前绝大多数项目引用此相关依赖。有些函数是固定写法例如claim,deposit,approve等等。

鄙人kunzhi96,感恩遇见! 1万+

【Web3 系列开发教程——创建你的第一个 NFT(3)】开始创建 NFT

本文将引导你使用以太坊和星际文件系统(IPFS)编写和部署不可替代()代币智能合约。星际文件系统IPFS是一个旨在。它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点构成一个分布式文件系统。它是一个开放源代码项目,自2014年开始由协议实验室在开源社区的帮助下发展。其最初由JuanBenet设计。ERC721是针对不可置换Token的智能合约标准接口,(non-fungiletokens)不可置换Token简称NFTs。在Goerli测试网络上创建和部署。...

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 2073

【Web3 开发系列教程—创建你的第一个智能合约(8)】将你的智能合约与前端集成

这是本教程系列的最后一部分。这部分,你会将你的的 Hello World 智能合约连接到前端项目并与之交互来创建一个全栈去中心化的应用程序。你会学到以下知识:对于这个 应用,我们将使用 React 作为我们的前端框架。但是,重要的是要注意,我们不会花太多时间讲解它的基础,因为我们将主要专注于将 Web3 功能引入我们的项目。当然,作为先决条件,你应该对 React 有初步的了解——知道组件、props、useState/useEffect 和基本的函数调用是如何工作的。 如果你以前从未听说......

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 645

智能工厂四大系统协同实战:ERP/PLM/MES/WMS集成架构与数据流解析

本文深入解析了智能工厂中ERP、PLM、MES、WMS四大核心系统的协同集成架构与数据流。通过实战案例,阐述了如何打通系统孤岛,实现从产品设计、资源计划、生产执行到仓储物流的数据无缝流转,从而构建高效、敏捷的智能工厂运营体系。

ujm567890的博客 674

内存优化--LOGBACK导致内存告警

一.故事背景 由于开辟新市场需要,开发了新的项部署在海外平台,其中最消耗内存的功能是消费kafka消息(最开始预计一天有1千万的量),部署完之后运行一段时间发现出现内存告警问题。 二.分析问题 出现内存告警,(新项目是低配置机器 2C4G * 2台)第一个念头是去查看堆空间设置的情况,看到jvm启动命令中堆空间都是直接指定大小,说明问题不是出在堆空间 -Xmx3g -Xms3g 先不管这些,去查看总的内存使用情况,发现总的内存空间使用将近有92% = 3.68G,那么这多出来使用的0.6

qq_33199919的博客 6052

统信UOS V20 安装mysql5.7.42详细教程

到bin/下,执行下面的命令,初始化mysql服务信息,得到数据库的初始密码,实际如果目录不一样记得换成自己的目录。下载后通过远程将安装包上传至服务器,我这里将安装包上传至/usr/local/mysql 下。ps:这时候如果还是不能远程访问的话,可能是防火墙的原因,命令行执行以下命令即可。再次登录,发现缺少 libtinfo.so.5文件,再次建立软连接。登录,发现报错,提示缺少libncurses.so.5文件,使用。创建 /var/lib/ 下mysql目录。登录成功,修改密码,设置远程访问。

为谁伫立在风中 1万+

等时替代模型( Isotemporal Substitution Model)

文献阅读:Associations of sedentary time and physical activity with adverse health conditions: Outcome-wide analyses using isotemporal substitution model(该论文于2022年4月28日发表在柳叶刀子刊 EClinicalMedicine 上)

姚巨龙的博客 1万+

PyQtWebEngine安装避坑指南:快速解决ModuleNotFoundError

本文详细解析了PyQt5开发中常见的ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'错误。核心原因是PyQt5 5.11版本后,网页引擎组件被独立为PyQtWebEngine包。文章对比了退回旧版本、独立安装及使用Conda等多种解决方案,并提供了针对Windows、macOS和Linux不同平台的实战安装指南与验证方法,帮助开发者快速解决依赖问题。

weixin_29056101的博客 427

Zipformer在RK3588上的性能实测:比Conformer快多少?内存省多少?

本文在RK3588平台上对Zipformer和Conformer语音识别模型进行了全面的性能实测。结果显示,Zipformer在模型部署中展现出显著优势:推理速度比Conformer快约56%,峰值内存占用降低约60%,同时在AISHELL-1等测试集上保持了相当的识别准确率。这为边缘ASR应用提供了更高效、更节省资源的解决方案。

metal的博客 482

Dify 1.1.3部署避坑指南:用wait-for-it.sh解决PostgreSQL初始化失败问题

本文详细解析了Dify 1.1.3部署中遇到的插件数据库初始化失败问题,并提供了使用wait-for-it.sh脚本的实战解决方案。通过剖析Docker Compose服务依赖管理的局限性,指导用户如何改造镜像与配置,确保服务按正确顺序启动,从而有效解决数据库连接失败等部署难题。

wdx012345的博客 1003

从Zemax到Speos:HUD设计数据无缝迁移避坑指南(含STEP文件精度验证)

本文详细介绍了从Zemax到Speos的HUD设计数据无缝迁移方法,重点解决Zernike曲面参数保真、虚拟厚度设置和坐标系对齐等核心问题。通过STEP文件精度验证和工程化解决方案,帮助工程师避免数据迁移中的常见陷阱,提升HUD系统设计效率。适用于Ansys Zemax和Ansys Speos用户,优化光学性能验证流程。

h6i7j8的博客 1063

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: 【小程序】解析小程序原理
下一篇: 【Web3 开发系列教程—创建你的第一个智能合约(3)】什么是 Gas,它是如何使用的?
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值