从入门到进阶:使用Solidity开发智能合约的完整指南,包括Token和NFT合约实战
imtoken钱包官网app下载 2025年2月18日 12:12:49 tp官方正版下载 15
智能合约起源
知名密码学家尼克·萨博于 1994 年提出了智能合约概念。但当时因技术等方面因素受限,一直未能落地。像那时的网络条件,还有编程水平,都无法满足复杂合约程序的运行需求。在那之后的很长时间里,它就仿佛一颗被灰尘盖住的宝石,一直在期待着发光的时刻。
多年来人们一直在进行探索,然而在应用方面的差距依然很大。早期的科研人员能察觉到这一概念蕴含的潜力,不过却缺少将其实现的途径。直到互联网时代到来之后,社会对自动化合约的需求日益强烈,这才让它再次进入到人们的视野当中。
现有应用局限
如今智能合约在互联网的一些场景被应用了,比如有自动还款的情况,还有无人机售货等情况。不过,这类应用大多是在个人与机构之间的合约领域,就像信用卡可以自动还款,这种方式既便捷又高效。然而,在个人与个人之间,智能合约几乎是没有的。
问题的根源在于“信任”。在生活里,很多合约都包含着陌生人间的金钱交易。要是没有第三方去提供担保,那么毁约的情形就很可能会出现。比如,有两个人约定进行转账交货,一方给了钱之后,对方却不发货,并且还否认有这回事,在这种情况下,就很难去进行维权,正因如此,这种交易方式难以得到广泛推广。
区块链的契机
区块链的出现为智能合约带来了转机。区块链具备去中心化这一特点,同时数据不可被篡改。这些特点可以解决陌生人间的信任问题。比如,比特币的交易记录无法进行更改,从而保障了交易的可靠性。
以太坊诞生后,智能合约得以大规模应用成为可能。以太坊是构建在区块链之上的,它借助了区块链的优势,给智能合约提供了稳定的运行环境,就好像为智能合约建造了一所稳固的房屋那般。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17; //solidity编译版本声明
import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; //第三方文件引入
//合约声明
contract DemoToken is ERC20 {
address owner; //地址变量
uint256 total = 5000000 * 10**18; //数字变量
//构造器
constructor() ERC20("demoToken", "DT") {
owner = msg.sender;
_mint(msg.sender, total);
}
//方法
function getTotal() public view onlyOwner returns (uint256) {
return total;
}
//修饰符
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
}
以太坊的作用
以太坊采用了智能合约技术,所以能够实现更多的功能。它是区块链 2.0 的代表,其设计理念以及底层系统设计都获得了大众的认可。有许多开发者在以太坊上构建 dApp,以此来推动生态的发展。
// SPDX-License-Identifier: MIT
以太坊虚拟机 EVM 衍生出了一些区块链网络,比如 bsc、trc、matic 等。在以太坊上编写的智能合约,是可以在这些网络里被使用的。这使得智能合约的应用范围和影响力得到了极大的扩展。
pragma solidity ^0.8.17; //solidity编译版本声明
开发语言solidity
import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; //第三方文件引入
Solidity 是一种用于实现智能合约的编程语言。它具有高级性。它受到了 C++、Python 和 JavaScript 等语言的影响。这种语言能够在以太坊虚拟机(EVM)上运行。开发者可以运用熟悉的语法来编写代码。这样他们无需为代码的移植和跨平台问题而担忧。
contract DemoToken is ERC20 {
Solidity 是一种静态类型语言。它具备支持继承的特性,也支持库引用等。同时,它还可以让用户自定义复杂的结构类型。在开发复杂金融合约的过程中,它能够实现精细的逻辑控制,这样就方便了开发者去实现自己的创意。
代码实践与后续学习
address owner; //地址变量
uint256 total = 5000000 * 10**18; //数字变量
学习时会给出一段示例代码,这段代码会借助注释来辅助理解。代码本身较为简单,却可以让我们初步知晓智能合约的代码结构以及功能的实现方式。通过对这段代码展开分析,我们能够对智能合约的各个组成部分形成一个基本的认知。
constructor() ERC20("demoToken", "DT") {
owner = msg.sender;
_mint(msg.sender, total);
}
这节课能让我们初步认识智能合约,而下一节课要学习 solidity 里的变量类型。这是深入学习智能合约开发的重要一步,通过逐步学习,我们能掌握更多技巧,进而完成复杂合约的开发。你期待下节课的变量类型学习吗?不妨给本文点赞、分享,然后一起讨论学习。