文章《5 分钟掌握 Solidity 编程语言:以太坊智能合约的支柱》首次出现在 Coinpedia Fintech News 上
介绍:
您是否想过,区块链行业的不断发展如何彻底改变了我们对数字资产的看法?如果没有以太坊(一个用于去中心化应用程序 (dApp) 的全球开源平台),这种发展是不可能实现的。它是其原生加密货币以太币 (ETH) 的基石。
以太币 (ETH) 是全球第二大加密货币,目前市值 4048.6 亿美元,仅次于比特币 (BTC)。它还因其权益证明验证方法而闻名。任何寻求可扩展、可编程和去中心化安全平台的人都可以使用以太坊。
以太坊的根本潜力在于其智能合约的主要语言:Solidity。让我们深入了解 Solidity 的基础知识。
Solidity 简介:
什么是 Solidity?
Solidity 是以太坊引入的用于创建智能合约的主要语言。它是一种高级、面向对象、静态类型的语言,专为智能合约而设计。Solidity 是一种相对较新的语言,由 Gavin Wood 于 2014 年提出,后来由 Christian Reitwiessner 和 Alex Beregszaszi 开发。尽管它是新语言,但它已成为以太坊开发人员最喜欢的语言。
其主要特性包括:支持多重继承以及 C3 线性化、复杂的用户定义数据类型、库甚至继承,还引入了(ABI)应用程序二进制干扰,以确保类型安全并包含自然语言规范。
为什么以太坊采用 Solidity?
Solidity 与 C++、JavaScript 和 Python 等语言有相似之处,并在连接到区块链的以太坊节点上托管的以太坊虚拟机 (EVM) 上运行。它非常有用,能够创建支持用户定义库和继承的工业、有益和强大的应用程序。它确保在以太坊节点上无缝部署和执行合约。
以太坊虚拟机主要作为智能合约的运行环境,通过国际公共节点网络,确保不受信任代码的安全性和实现。
Solidity 编译 EVM 运行的以太坊字节码,专注于防止拒绝服务攻击,保证程序无法访问彼此的状态,同时也确认抑制任何推断。
Solidity 语法和结构
基本语法
C++、JavaScript 和 Python 等语言影响了 Solidity。Solidity 使用类似 ECMAScript 的语法,但具有静态类型。Solidity 使用的实现语言是 C++。它具有命令式范式,需要在每一步中隐式地编码函数。
它包含典型的数据结构,例如映射、数组和其他数据类型,例如支持 oop 和自定义结构的整数、布尔值和地址。函数是该语言的基本块,可以修改状态变量并具有返回类型。
Solidity 合约的结构
我们以一个定义 pragma solidity version 的序言开始智能合约,它声明了用于代码的 solidity 编译器的版本并包含合约的名称。其次,contract 关键字是代码片段应如何开始陈述代码所属的合约。
合约可以被视为类似于 OOP 中的类。每个合约都有以下状态变量的声明:具有返回类型和方法的函数、修饰符、事件、结构类型、枚举和错误。
代码的每个子部分都有其功能。状态变量用于存储合约的数据,函数用于定义行为,事件用于合约与外部功能之间的通信,修饰符用于施加规则。
使用 Solidity 编写简单的智能合约
设置开发环境
Solidity智能合约可以在离线和在线模式下实现
离线模式:要离线运行 solidity,您的系统上必须有 Node.js、truffle global 和 ganache-cli。然后,您可以实现智能合约、创建 truffle 项目并使用 truffle 控制台进行交互
在线模式:使用Remix IDE编译并运行智能合约,具体步骤如下:
从 Remix IDE 开始,设置环境,并创建一个新文件
创建智能合约代码并编译
部署并运行代码
调试和方法调用
简单 Solidity 合约示例
//Pragma solidity>=0.4.22///合约标题///authorcontract Storage{ uint256 private data; Function set(uint256 _data) public{ data=_data; } Function get() public view returns(uint256){ Return data; }}
让我们来实际操作一下 Solidity 合约的一个简单的示例:
片段:
上面的代码片段允许用户存储单个无符号整数。在这里,set 函数存储数据,get 函数检索数据。您可以尝试这些简短而简单的例子来开始您在这个领域的旅程。
Solidity 的高级功能
继承和库
除了清晰的合约编写方式外,Solidity 的显著特点是继承。继承是指在 OOPS 中使用类或继承类的属性。同样,它允许用户在另一个合约中继承一个合约的属性和方法。这使得代码更具可读性,使编写更简洁,并提高了代码的可重用性。Solidity 中的库是一个福音,因为它们可以帮助您组织代码的表示方式,允许进行适当的修改以对其进行模块化。
安全最佳实践
编写智能合约时,安全性至关重要。有一些常见的漏洞,如重入攻击和整数溢出。重入攻击是指当函数在更新自身状态之前进行外部调用时,您的代码容易受到攻击。因此,它允许外部合约元素重新进入该函数并通过重复这些操作来干预提款等操作。
另一个漏洞是众所周知的麻烦制造者整数溢出,当运算结果超出指定数据类型可以包含的最大限制时,就会发生这种情况。因此,为了克服这些问题,最佳做法是使用 SafeMath 库,进行彻底的审计,并实施检查-效果-交互模式。
确保安全的最新有效做法是合同的简单设计和模糊测试,这听起来有点不合常规,但随机数据测试有助于发现隐藏的问题。此外,一个战略举措是制定大型赏金计划,让安全社区参与贡献和修复漏洞并提供巨额赏金。
开发和部署 Solidity 合约
开发工作流程
以下是工作流程:
想法概念化:开发人员应该为合同设计一个明确的目的。
编写合同:使用 Remix IDE、Truffle 或 Hardhat 等 IDE 编写干净、可读的代码。
测试:在 IDE 上使用适当的测试框架
调试:调试代码中是否存在任何问题,并检查代码是否按预期执行。
安全检查:使用 MythX 等安全工具检查是否存在漏洞。
部署:最后,部署合约并确保无缝集成
在以太坊网络上部署
部署智能合约需要大量考虑代码的准确性。因此,在与主网络交互之前,我们首先在以太坊测试网络上部署智能合约,例如 Robstan、Kovan 或 Rinkben。它们让我们找到并解决代码中的错误。较新的测试网络是 Goerli,它于 2018 年推出,使用权威证明共识机制
一旦您完成合约,您就可以将其部署到主网上。在主网上部署需要以太币(ETH)支付 gas 费。因此,拥有准确无误的代码是必要的。Infura 和 Metamask 等平台为您提供 API 和钱包服务。因此,一旦您的合约部署完毕,它们将是不可变且公开的。
Brownie 是传统 Truffle 和 hardhat IDE 的替代品,它提供了命令行界面和交互式控制台,并且它使用 pytest,因此对于熟悉 Python 的开发人员来说,Brownie 无疑会加分!
Solidity 和以太坊智能合约的未来
Solidity 的演变
Solidity 已经取得了令人难以置信的发展。目前的重点是安全更新、效率和可重用性。这一发展背后的大型社区不断增强并致力于使 Solidity 达到今天的水平。
许多国家的开发者生态系统也在不断壮大。要成为 Solidity 开发人员,您需要具备扎实的计算机编程基础。
趋势与创新
Solidity 的最新趋势是智能合约开发,包括第 2 层解决方案、跨链互操作性和 AI 集成。这项创新彻底改变了区块链行业和 dApp 的开发。
除了专注于增加程序分析和提高正确性之外,研究人员还致力于将 TAVS 电子投票协议等高级加密方案集成到 Solidity 中。为了提高可用性并解决基于字节的分析问题,正在开发像 SolSEE 这样的新工具。
结论
总而言之,Solidity 是以太坊和智能合约开发的支柱。它为创建 dApp 提供了一个安全、可靠且构建良好的框架。随着区块链技术在行业中继续大放异彩,作为其先驱的 Solidity 仍然是增长的最强大贡献者之一。所以,做好一切准备,进入去中心化未来的舞台吧!
另请阅读:密码学 101:区块链开发初学者指南