什么是Web3?

什么是Web3?

Web3是下一代互联网,建立在区块链技术之上,可以实现去中心化应用程序(DApps)的开发和使用。Web3是一种新的互联网协议,将互联网从中心化的客户端-服务器模型转变为去中心化的对等网络。

Web3的核心是以太坊区块链,以太坊是一种开放的区块链平台,可以用于创建和运行智能合约。智能合约是一种自动化的计算机程序,可以在没有中间人的情况下执行交易和协议。以太坊的目标是成为一个全球性的计算机,可以让任何人都可以使用它来运行DApps。

Web3的优势

Web3的优势在于它可以实现去中心化的应用程序,这意味着它可以提供更高的安全性、透明度和可靠性。Web3的去中心化模型可以避免单点故障和数据泄漏等问题,从而提高了应用程序的可靠性和可用性。此外,Web3还可以为用户提供更多的隐私和安全,因为它可以让用户保持匿名和控制自己的数据。

Web3的应用

Web3的应用范围非常广泛,它可以用于创建各种类型的DApps,包括加密货币钱包、去中心化交易所、游戏、社交网络等等。Web3还可以用于创建智能合约,这些合约可以用于执行各种协议和交易,包括投票、众筹、物联网设备等等。

使用Web3.js连接以太坊节点

要开发和使用Web3应用程序,需要使用一些工具和技术。其中最重要的是Web3.js库,它是一个JavaScript库,可以用于连接以太坊节点和执行各种操作,包括查询账户余额、创建和发送交易、与智能合约交互等等。

下面是一个使用Web3.js连接以太坊节点并查询账户余额的示例代码:

// 引入Web3.js库
const Web3 = require('web3');

// 创建Web3实例,连接以太坊节点
const web3 = new Web3('https://mainnet.infura.io/v3/your-project-id');

// 查询账户余额
web3.eth.getBalance('0x1234567890123456789012345678901234567890')
    .then(balance => {
    
    
        console.log(`账户余额:${
      
      web3.utils.fromWei(balance, 'ether')} ETH`);
    })
    .catch(error => {
    
    
        console.error(error);
    });

上面的代码使用Infura提供的公共节点连接以太坊主网,并查询指定账户的余额。其中,web3.eth.getBalance()方法用于查询账户余额,web3.utils.fromWei()方法用于将余额从Wei转换为ETH。

使用Web3.js创建和发送以太交易

除了查询账户余额,Web3.js还可以用于创建和发送以太交易。下面是一个使用Web3.js创建和发送以太交易的示例代码:

// 引入Web3.js库
const Web3 = require('web3');

// 创建Web3实例,连接以太坊节点
const web3 = new Web3('https://mainnet.infura.io/v3/your-project-id');

// 创建交易对象
const txObject = {
    
    
    from: '0x1234567890123456789012345678901234567890',
    to: '0x0987654321098765432109876543210987654321',
    value: web3.utils.toWei('0.1', 'ether'),
};

// 签名并发送交易
web3.eth.accounts.signTransaction(txObject, 'your-private-key')
    .then(signedTx => {
    
    
        web3.eth.sendSignedTransaction(signedTx.rawTransaction)
            .then(receipt => {
    
    
                console.log(`交易哈希值:${
      
      receipt.transactionHash}`);
            })
            .catch(error => {
    
    
                console.error(error);
            });
    })
    .catch(error => {
    
    
        console.error(error);
    });

上面的代码创建了一个交易对象,包括发送方、接收方和转账金额等信息。然后使用私钥对交易对象进行签名,并通过web3.eth.sendSignedTransaction()方法发送交易。

使用Web3.js与智能合约交互

Web3.js还可以用于与智能合约交互,包括调用合约方法和监听合约事件等。下面是一个使用Web3.js调用智能合约方法的示例代码:

// 引入Web3.js库
const Web3 = require('web3');

// 创建Web3实例,连接以太坊节点
const web3 = new Web3('https://mainnet.infura.io/v3/your-project-id');

// 创建合约实例
const contract = new web3.eth.Contract(abi, contractAddress);

// 调用合约方法
contract.methods.balanceOf('0x1234567890123456789012345678901234567890').call()
    .then(balance => {
    
    
        console.log(`Token余额:${
      
      web3.utils.fromWei(balance, 'ether')} ETH`);
    })
    .catch(error => {
    
    
        console.error(error);
    });

上面的代码创建了一个合约实例,并调用了合约的balanceOf()方法查询指定账户的Token余额。其中,abi是智能合约的ABI(Application Binary Interface)定义,contractAddress是智能合约的地址。

Web3.js和以太坊智能合约开发一个简单的DApp

需要一个智能合约。我们将创建一个非常简单的智能合约,名为SimpleStorage,它具有一个整数类型的变量storedData和两个函数:setgetset函数将存储一个整数值到storedData变量中,而get函数将返回storedData的当前值。

下面是智能合约的Solidity代码:

pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 storedData;

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

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

接下来,我们需要使用Remix IDE(一个在线Solidity IDE)将智能合约编译成字节码和ABI(应用程序二进制接口)。将编译后的字节码和ABI复制到一个文件中,我们将在后面使用它们。

现在,我们需要一个Web3.js库。你可以使用npm包管理器来安装它。在终端中输入以下命令:

npm install web3

接下来,我们需要一个以太坊节点来连接。在这里,我们将使用Infura提供的公共节点。你需要在Infura上注册一个账户,创建一个项目,并获取项目的API密钥。将API密钥复制到一个文件中,我们将在后面使用它。

现在,我们可以开始编写JavaScript代码。我们将使用Node.js来运行这个代码。首先,我们需要导入Web3.js库和我们之前复制的ABI文件。我们还需要指定我们的Infura节点的URL和我们的账户地址。在这里,我们假设你已经创建了一个以太坊账户并拥有私钥。

const Web3 = require('web3');
const contractABI = require('./SimpleStorageABI.json');

const infuraURL = 'https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID';
const accountAddress = 'YOUR_ACCOUNT_ADDRESS';
const privateKey = 'YOUR_ACCOUNT_PRIVATE_KEY';

接下来,我们需要使用Web3.js创建一个以太坊网络连接。我们将使用Infura提供的公共节点连接到以太坊主网。我们还需要使用我们的私钥来解锁我们的账户。

const web3 = new Web3(infuraURL);

const unlockAccount = async () => {
    
    
  try {
    
    
    await web3.eth.personal.unlockAccount(accountAddress, privateKey, 600);
    console.log('Account unlocked');
  } catch (error) {
    
    
    console.log(`Error unlocking account: ${
      
      error}`);
  }
};

unlockAccount();

现在我们已经解锁了我们的账户,我们可以使用Web3.js来创建一个智能合约实例。我们需要指定智能合约的地址和ABI。

const contractAddress = 'CONTRACT_ADDRESS';

const simpleStorageContract = new web3.eth.Contract(
  contractABI,
  contractAddress
);

接下来,我们可以使用Web3.js来调用智能合约的get函数,以获取当前storedData变量的值。

const getData = async () => {
    
    
  try {
    
    
    const result = await simpleStorageContract.methods.get().call();
    console.log(`Stored data: ${
      
      result}`);
  } catch (error) {
    
    
    console.log(`Error getting data: ${
      
      error}`);
  }
};

getData();

我们还可以使用Web3.js来调用智能合约的set函数,以将一个整数值存储到storedData变量中。

const setData = async (value) => {
    
    
  try {
    
    
    const gasPrice = await web3.eth.getGasPrice();
    const gasEstimate = await simpleStorageContract.methods
      .set(value)
      .estimateGas({
    
     from: accountAddress });
    const result = await simpleStorageContract.methods
      .set(value)
      .send({
    
     from: accountAddress, gas: gasEstimate, gasPrice: gasPrice });
    console.log(`Transaction hash: ${
      
      result.transactionHash}`);
  } catch (error) {
    
    
    console.log(`Error setting data: ${
      
      error}`);
  }
};

setData(42);

现在我们已经可以使用Web3.js和智能合约交互了。你可以进一步探索Web3.js的功能,例如如何使用事件监听器来监听智能合约的事件。希望这篇文章能帮助你入门以太坊DApp的开发!

猜你喜欢

转载自blog.csdn.net/m0_69117588/article/details/130589006