📜  web3 连接到智能合约 - Javascript (1)

📅  最后修改于: 2023-12-03 15:05:55.077000             🧑  作者: Mango

Web3 连接到智能合约 - JavaScript

Web3 是一个用于连接以太坊网络的 JavaScript 库。通过 Web3,开发者可以连接到以太坊网络并与智能合约进行交互。

安装 Web3

要使用 Web3,需要先安装它。可以使用 npm 在命令行中安装 Web3:

npm install web3
连接到以太坊网络

在连接到以太坊网络之前,需要先创建一个 Provider 对象。Provider 对象负责与以太坊节点进行通信。你可以使用 Infura 来获取您自己的专用 Provider 对象。

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

const provider = new Web3.providers.HttpProvider('https://ropsten.infura.io/v3/<your_project_id>'); // 连接到 Infura

const web3 = new Web3(provider); // 创建 Web3 实例

web3.eth.getBlockNumber().then(console.log); // 打印当前区块高度
连接到智能合约

一旦连接到以太坊网络,开发者就可以连接到智能合约并与之进行交互。为此,我们需要合约的 ABI 和地址。

const contractABI = [ // 合约 ABI
    {
        "inputs": [],
        "name": "getGreeting",
        "outputs": [
            {
                "internalType": "string",
                "name": "",
                "type": "string"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "string",
                "name": "_greeting",
                "type": "string"
            }
        ],
        "name": "setGreeting",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    }
];

const contractAddress = "0x1234567890abcdef1234567890abcdef12345678"; // 合约地址

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

现在,我们已经可以使用合约实例与智能合约进行交互了。

调用智能合约函数

在调用智能合约函数之前,需要确保您的以太坊账户有足够的 ETH 来支付 gas 费用。否则,调用智能合约函数将会失败。

const greeting = await contract.methods.getGreeting().call(); // 调用合约的 getGreeting 函数

console.log(greeting); // 打印返回结果
发送交易

如果您需要修改智能合约的状态(即调用一个写入函数),则需要发送一笔交易。在发送交易之前,还需要确保您使用的以太坊账户有足够的 ETH 来支付 gas 费用。

const tx = await contract.methods.setGreeting("Hello, World!").send({ from: "Your Ethereum Address" }); // 发送交易

console.log(tx); // 打印交易信息
总结

使用 Web3 可以连接到以太坊网络,与智能合约进行交互,并进行读写操作。开发者需要确保他们的以太坊账户具有足够的 ETH 来支付 gas 费用。