📅  最后修改于: 2023-12-03 15:00:37.768000             🧑  作者: Mango
以太坊是一个开源的具有智能合约功能的区块链平台,建于以太坊上的应用程序可以实现自动执行的合同。以太坊的代币被称作以太币(ETH),是以太坊网络的核心加密货币。
在以太坊上,智能合约可以自动执行、管理资产和实现逻辑,并可通过各种编程语言(如Solidity、Viper、Bamboo等)进行编写。以太坊网络还支持去中心化应用程序(DApp)的开发,可以在以太坊上构建分布式应用程序,实现去中心化、安全和可靠的应用程序。
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是与以太坊交互的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,我们可以轻松创建一个具有前端和后端功能的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函数并传递候选人的名称作为参数。