以太坊概述
以太坊是一个基于区块链的开源分布式软件平台,是比特币最大的竞争对手。以太坊于2013年由加密货币研究员维塔利克·布特林首次提出,他建议在比特币中添加一种用于编程的脚本语言。2015年7月30日,以太坊正式启动。它的开发由在线进行的众筹支持,这是一种常见的加密货币发行方式。
阅读更多:什么是以太坊?
以太坊的原生加密货币被称为以太币(Ether,ETH),拥有名为Solidity的特色编程语言。区块链是以太坊的底层技术,是一种分布式账本,维护着一个永久的、防篡改的记录列表。这种去中心化架构使开发人员能够创建各种去中心化应用(dApp),从平台强大的生态系统和多样性中受益。
以太坊的核心功能之一是支持智能合约。我们在第1课中已经讲到,智能合约是基于预定义条件自动执行的数字合约,实现了一个无需中间人的去信任环境,可以安全透明地执行交易。以太坊网络上的矿工曾经通过挖矿获取以太币,这些代币不仅是一种货币,还用于支付平台的使用费;在“合并(The Merge)”之后,以太坊过渡到权益证明(PoS)机制,由验证者(非矿工)验证交易并创建新区块。验证者并不挖掘以太币,而是通过参与网络获得以太币的交易费用和区块奖励。以太币仍用于支付平台上的使用费,但其发行和分配都不同于之前的工作量证明(PoW)机制。
以太坊能够托管各类dApp和智能合约,吸引了开发人员和企业的极大关注,使其成为在金融、供应链和游戏等各个行业构建创新解决方案的领先平台。随着以太坊生态系统的不断发展,以太坊仍然处于区块链技术的最前沿,不断推动创新并打造了一个充满活力的开发人员和用户社区。
阅读更多:什么是合并(The Merge)?
阅读更多:什么是DApp?
Solidity编程语言简介
Solidity是一种高级、静态类型的编程语言,专门为在以太坊区块链上编写智能合约而设计。Solidity由以太坊的核心团队开发,其语法受到JavaScript的影响,对广大开发者来说更加熟悉且易于上手。Solidity是图灵完备的,开发人员可以在他们的智能合约中创建复杂的逻辑并实现各种功能。Solidity编译成以太坊虚拟机(EVM)字节码,在以太坊网络上执行。
在Solidity中,开发人员可以自定义数据结构、创建用户定义的函数并实施访问控制机制等功能。通过Solidity可以创建各种去中心化应用,包括去中心化金融(DeFi)平台、非同质化代币(NFT)、去中心化自治组织(DAO)等。
Solidity合约结构示例
Solidity合约是独立的代码片段,由变量、函数、事件和修饰符等元素组成。Solidity合约的基本结构如下:
Pragma编译指令:此行指定智能合约兼容的Solidity编译器版本。例如:
Solidity
pragma solidity ^0.8.0;
合约定义:此行定义合约及其名称。
例如:
Solidity
contract SimpleToken {
状态变量:将合约状态存储在区块链上的变量。比如,您可以存储代币的总供应量:
Solidity
uint256 public totalSupply;
函数:函数定义了合约的行为,可以被外部用户或其他合约调用。以下是一个简单的代币转移函数:
Solidity
function transfer(address recipient, uint256 amount) public {
// ... transfer logic ...
}
Solidity
event Transfer(address indexed from, address indexed to, uint256 value);
修饰符:修饰符用于修改函数的行为,通常用于访问控制或预设条件检查。以下是用于检查发送者是否拥有足够代币进行转移的修饰符:
JavaScript
modifier hasEnoughTokens(uint256 amount) {
require(balanceOf[msg.sender] >= amount, "Insufficient balance");
_;
}
构造函数:构造函数是一个特殊的函数,用于在部署合约时初始化合约的状态变量。例如,初始化代币的总供应量:
JavaScript
constructor(uint256 _totalSupply) {
totalSupply = _totalSupply;
balanceOf[msg.sender] = _totalSupply;
}
综上所述,一个简单的代币的Solidity合约可能如下:
TypeScript
pragma solidity ^0.8.0;
contract SimpleToken {
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
event Transfer(address indexed from, address indexed to, uint256 value);
modifier hasEnoughTokens(uint256 amount) {
require(balanceOf[msg.sender] >= amount, "Insufficient balance");
_;
}
}
要点
以太坊概述
以太坊是一个基于区块链的开源分布式软件平台,是比特币最大的竞争对手。以太坊于2013年由加密货币研究员维塔利克·布特林首次提出,他建议在比特币中添加一种用于编程的脚本语言。2015年7月30日,以太坊正式启动。它的开发由在线进行的众筹支持,这是一种常见的加密货币发行方式。
阅读更多:什么是以太坊?
以太坊的原生加密货币被称为以太币(Ether,ETH),拥有名为Solidity的特色编程语言。区块链是以太坊的底层技术,是一种分布式账本,维护着一个永久的、防篡改的记录列表。这种去中心化架构使开发人员能够创建各种去中心化应用(dApp),从平台强大的生态系统和多样性中受益。
以太坊的核心功能之一是支持智能合约。我们在第1课中已经讲到,智能合约是基于预定义条件自动执行的数字合约,实现了一个无需中间人的去信任环境,可以安全透明地执行交易。以太坊网络上的矿工曾经通过挖矿获取以太币,这些代币不仅是一种货币,还用于支付平台的使用费;在“合并(The Merge)”之后,以太坊过渡到权益证明(PoS)机制,由验证者(非矿工)验证交易并创建新区块。验证者并不挖掘以太币,而是通过参与网络获得以太币的交易费用和区块奖励。以太币仍用于支付平台上的使用费,但其发行和分配都不同于之前的工作量证明(PoW)机制。
以太坊能够托管各类dApp和智能合约,吸引了开发人员和企业的极大关注,使其成为在金融、供应链和游戏等各个行业构建创新解决方案的领先平台。随着以太坊生态系统的不断发展,以太坊仍然处于区块链技术的最前沿,不断推动创新并打造了一个充满活力的开发人员和用户社区。
阅读更多:什么是合并(The Merge)?
阅读更多:什么是DApp?
Solidity编程语言简介
Solidity是一种高级、静态类型的编程语言,专门为在以太坊区块链上编写智能合约而设计。Solidity由以太坊的核心团队开发,其语法受到JavaScript的影响,对广大开发者来说更加熟悉且易于上手。Solidity是图灵完备的,开发人员可以在他们的智能合约中创建复杂的逻辑并实现各种功能。Solidity编译成以太坊虚拟机(EVM)字节码,在以太坊网络上执行。
在Solidity中,开发人员可以自定义数据结构、创建用户定义的函数并实施访问控制机制等功能。通过Solidity可以创建各种去中心化应用,包括去中心化金融(DeFi)平台、非同质化代币(NFT)、去中心化自治组织(DAO)等。
Solidity合约结构示例
Solidity合约是独立的代码片段,由变量、函数、事件和修饰符等元素组成。Solidity合约的基本结构如下:
Pragma编译指令:此行指定智能合约兼容的Solidity编译器版本。例如:
Solidity
pragma solidity ^0.8.0;
合约定义:此行定义合约及其名称。
例如:
Solidity
contract SimpleToken {
状态变量:将合约状态存储在区块链上的变量。比如,您可以存储代币的总供应量:
Solidity
uint256 public totalSupply;
函数:函数定义了合约的行为,可以被外部用户或其他合约调用。以下是一个简单的代币转移函数:
Solidity
function transfer(address recipient, uint256 amount) public {
// ... transfer logic ...
}
Solidity
event Transfer(address indexed from, address indexed to, uint256 value);
修饰符:修饰符用于修改函数的行为,通常用于访问控制或预设条件检查。以下是用于检查发送者是否拥有足够代币进行转移的修饰符:
JavaScript
modifier hasEnoughTokens(uint256 amount) {
require(balanceOf[msg.sender] >= amount, "Insufficient balance");
_;
}
构造函数:构造函数是一个特殊的函数,用于在部署合约时初始化合约的状态变量。例如,初始化代币的总供应量:
JavaScript
constructor(uint256 _totalSupply) {
totalSupply = _totalSupply;
balanceOf[msg.sender] = _totalSupply;
}
综上所述,一个简单的代币的Solidity合约可能如下:
TypeScript
pragma solidity ^0.8.0;
contract SimpleToken {
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
event Transfer(address indexed from, address indexed to, uint256 value);
modifier hasEnoughTokens(uint256 amount) {
require(balanceOf[msg.sender] >= amount, "Insufficient balance");
_;
}
}
要点