📌  相关文章
📜  eth (1)

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

以 'eth' 作主题的介绍

以太坊是一个开源的具有智能合约功能的区块链平台,建于以太坊上的应用程序可以实现自动执行的合同。以太坊的代币被称作以太币(ETH),是以太坊网络的核心加密货币。

在以太坊上,智能合约可以自动执行、管理资产和实现逻辑,并可通过各种编程语言(如Solidity、Viper、Bamboo等)进行编写。以太坊网络还支持去中心化应用程序(DApp)的开发,可以在以太坊上构建分布式应用程序,实现去中心化、安全和可靠的应用程序。

Solidity

Solidity是一种针对以太坊平台的智能合约语言,可以在EVM(以太坊虚拟机)上运行。Solidity被用来开发所有以太坊上的智能合约,是以太坊最重要的语言之一。它旨在实现高度优化的合约并支持静态类型、继承、库等先进的特性。以下是一个简单的Solidity智能合约的示例:

pragma solidity ^0.8.0;

contract Greeter {
    string private greeting;

    constructor(string memory _greeting) {
        greeting = _greeting;
    }

    function greet() public view returns (string memory) {
        return greeting;
    }

    function setGreeting(string memory _greeting) public {
        greeting = _greeting;
    }
}

该合约定义了一个名为"Greeter"的合约,包含一个私有字符串变量greeting和三个函数,其中构造函数用于初始化greeting变量,greet函数用于获取greeting变量的值,setGreeting函数用于更新greeting变量的值。

Web3.js

Web3.js是与以太坊交互的JavaScript库。它为JavaScript开发人员提供了一组API,可以与以太坊网络进行交互并与智能合约进行通信。以下是一个使用Web3.js连接以太坊网络并调用智能合约的示例:

const Web3 = require('web3');
const web3 = new Web3('https://mainnet.infura.io/<your-infura-key>');
const contractAddress = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'; // USDC合约地址
const abi = [
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
];
const usdcContract = new web3.eth.Contract(abi, contractAddress);

usdcContract.methods.name().call((error, name) => {
  console.log(`USDC名称: ${name}`);
});

usdcContract.methods.symbol().call((error, symbol) => {
  console.log(`USDC符号: ${symbol}`);
});

usdcContract.methods.decimals().call((error, decimals) => {
  console.log(`USDC小数位数: ${decimals}`);
});

该示例使用Web3.js连接以太坊网络,构造了一个与USDC代币合约交互的智能合约对象,并调用了智能合约中的name、symbol和decimals函数。

Truffle

Truffle是一款以太坊开发框架,为开发者提供编译、测试、调试和部署智能合约的工具。Truffle还提供了一个友好的开发环境,让初学者能够快速开始构建去中心化应用程序。

使用Truffle,我们可以轻松创建一个具有前端和后端功能的DApp。以下是使用Truffle创建的一个简单DApp的示例:

// 合约
pragma solidity ^0.8.0;

contract Voting {
    mapping (bytes32 => uint256) public votes;

    function vote(bytes32 candidate) public {
        votes[candidate] += 1;
    }
}

// 部署脚本
const Voting = artifacts.require("Voting");

module.exports = function(deployer) {
  deployer.deploy(Voting);
}

// 前端代码
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
const contractInstance = new web3.eth.Contract(Voting.abi, "合约地址");

function voteForCandidate() {
  const candidateName = $("#candidate").val();
  contractInstance.methods.vote(web3.utils.utf8ToHex(candidateName)).send({from: "用户地址"})
    .then((result) => console.log(result))
    .catch((error) => console.log(error));
}

该示例定义了一个简单的投票合约,包含一个votes映射,map在以太坊上是一种结构化数据存储方式。在部署脚本中,我们将该合约部署到以太坊网络上。在前端代码中,我们使用Web3.js连接到以太坊网络,并与使用Truffle部署的Voting合约进行交互,使用方法是调用vote函数并传递候选人的名称作为参数。