Web3区块链前端开发的那些事,2024学一下怎么使用Web3区块连开发吧

大家好,我是梦兽。一个Web全栈开发和Rust爱好者,如果想和我交流Web。关注梦兽编程公众号加入微信,一起探究前沿Web技术。

Web3 是互联网的未来,它带来了去中心化、透明和用户控制的新模式。学习Web3可以让你掌握前沿技术,参与搭建更加安全和公平的网络环境。通过区块链和智能合约,用户不再依赖中介,数据和资产的控制权完全在自己手中。Web3的应用领域广泛,包括去中心化金融(DeFi)、数字身份验证、NFT和去中心化应用(DApps)等。掌握这些技能不仅能提升你的技术水平,还能为你在这个快速发展的领域中创造更多职业机会。现在是学习Web3的最佳时机,抓住未来的无限可能。

今天我要给大家快速上手web3的工作流程。

Web3.js

Web3.js 是一个强大的 JavaScript 库,用于与以太坊区块链进行交互。我们将从安装开始,然后逐步构建一个简单的DApp(去中心化应用)来演示Web3.js的基本用法。

perl 复制代码
mkdir my-web3-app
cd my-web3-app
npm init -y
npm install web3

连接到以太坊网络

我们将使用 Infura 提供的免费节点服务。Infura 是一个提供以太坊和IPFS(星际文件系统)基础设施服务的平台。它为开发者提供了一个简单的API接口,帮助他们轻松地连接和使用以太坊区块链和IPFS网络[如Ropsten、Kovan、Rinkeby等],而无需运行自己的节点。 通过Infura,开发者可以进行各种以太坊相关的操作,例如发送交易、查询区块信息、与智能合约交互等。

首先,你需要在 Infura 注册一个账户并创建一个新的项目来获取你的API密钥。

ini 复制代码
const Web3 = require('web3');

// 使用Infura的Ropsten测试网络
const infuraUrl = 'https://ropsten.infura.io/v3/YOUR_INFURA_PROJECT_ID';
const web3 = new Web3(new Web3.providers.HttpProvider(infuraUrl));

web3.eth.net.isListening()
  .then(() => console.log('成功连接到以太坊网络'))
  .catch(e => console.log('连接失败:', e));

获取账户余额

javascript 复制代码
const address = 'YOUR_ETHEREUM_ADDRESS'; // 需替换为你自己的以太坊地址 Ropsten、Kovan、Rinkeby 这些节点的服务平台地址

web3.eth.getBalance(address, (err, wei) => {
  if (!err) {
    const balance = web3.utils.fromWei(wei, 'ether');
    console.log(`地址 ${address} 的余额为: ${balance} ETH`);
  } else {
    console.log('获取余额时出错:', err);
  }
});

部署和调用智能合约

什么是智能合约调用?

智能合约调用可以理解为与部署在区块链上的合约进行交互,通过调用其公开的方法来执行某些操作。这些操作可以是读取数据(无状态更改的查询)或修改数据(状态更改,如转账、更新记录等)。

在这一部分,我们将展示如何使用Web3.js来部署和调用智能合约。首先,我们需要一个简单的智能合约。我们将使用 Solidity 语言编写一个简单的存储合约。

创建一个名为 SimpleStorage.sol 的文件,并添加以下代码:

csharp 复制代码
// Solidity语言进群一起交流
pragma solidity ^0.5.0;

contract SimpleStorage {
    uint public storedData;

    function set(uint x) public {
        storedData = x;
    }

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

编译智能合约

复制代码
npm install solc

编码编译文件代码

ini 复制代码
const solc = require('solc');
const fs = require('fs');

const source = fs.readFileSync('SimpleStorage.sol', 'utf8');
const input = {
  language: 'Solidity',
  sources: {
    'SimpleStorage.sol': {
      content: source,
    },
  },
  settings: {
    outputSelection: {
      '*': {
        '*': ['*'],
      },
    },
  },
};

const output = JSON.parse(solc.compile(JSON.stringify(input)));
const contract = output.contracts['SimpleStorage.sol'].SimpleStorage;

console.log('ABI:', contract.abi);
console.log('Bytecode:', contract.evm.bytecode.object);

部署智能合约

我们需要一个以太坊账户和一些ETH来支付部署费用。可以使用MetaMask生成账户并获取测试网络上的ETH。

ini 复制代码
const abi = contract.abi;
const bytecode = contract.evm.bytecode.object;

const deployContract = async () => {
  const accounts = await web3.eth.getAccounts();
  const result = await new web3.eth.Contract(abi)
    .deploy({ data: bytecode })
    .send({ from: accounts[0], gas: '1000000' });

  console.log('合约部署成功,地址:', result.options.address);
};

deployContract();

调用智能合约

最后,我们展示如何调用已经部署的智能合约。假设合约已经部署并且我们有合约地址:

javascript 复制代码
const contractAddress = 'YOUR_DEPLOYED_CONTRACT_ADDRESS'; // 需替换为实际的合约地址

const simpleStorage = new web3.eth.Contract(abi, contractAddress);

// 调用合约的get方法
simpleStorage.methods.get().call((err, result) => {
  if (!err) {
    console.log('合约存储的数据:', result);
  } else {
    console.log('调用合约时出错:', err);
  }
});

// 调用合约的set方法
const setData = async (value) => {
  const accounts = await web3.eth.getAccounts();
  await simpleStorage.methods.set(value).send({ from: accounts[0] });
  console.log(`成功设置存储数据为: ${value}`);
};

// 调用存储方法
setData(42);

以上代码展示了如何使用Web3.js连接到以太坊网络、获取账户余额、部署和调用智能合约。你可以根据需要进行调整和扩展。希望这对你有所帮助!

本文使用 markdown.com.cn 排版

相关推荐
用户479492835691517 小时前
Safari 中文输入法的诡异 Bug:为什么输入 @ 会变成 @@? ## 开头 做 @ 提及功能的时候,测试同学用 Safari 测出了个奇怪的问题
前端·javascript·浏览器
没有故事、有酒17 小时前
Ajax介绍
前端·ajax·okhttp
朝新_17 小时前
【SpringMVC】详解用户登录前后端交互流程:AJAX 异步通信与 Session 机制实战
前端·笔记·spring·ajax·交互·javaee
裴嘉靖17 小时前
Vue 生成 PDF 完整教程
前端·vue.js·pdf
毕设小屋vx ylw28242617 小时前
Java开发、Java Web应用、前端技术及Vue项目
java·前端·vue.js
冴羽18 小时前
今日苹果 App Store 前端源码泄露,赶紧 fork 一份看看
前端·javascript·typescript
蒜香拿铁18 小时前
Angular【router路由】
前端·javascript·angular.js
brzhang18 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构
西洼工作室18 小时前
高效管理搜索历史:Vue持久化实践
前端·javascript·vue.js
广州华水科技18 小时前
北斗形变监测传感器在水库安全中的应用及技术优势分析
前端