智能合约入门教程
前言
web3 的概念提出已久,许多从事 web2 开发的小伙伴想入门智能合约的开发,却不晓得从哪里下手。明天小编会带着大家从零开发一个根底的智能合约,帮忙大家疾速入门。
1 开发工具 remix 的介绍
Remix 是一个基于 Web 的 Solidity IDE,提供了一个集成开发环境,用于编写、测试和部署 Solidity 智能合约。以下是应用 Remix 的根本步骤:
1、remix 在线地址 网站:https://remix.ethereum.org/ (如果想要本地安装包的能够给小编浏览哦);
2、关上在线地址后咱们能够看到!,这样的页面,左测 constracts 文件夹中已有 3 个官网提供给咱们的智能合约文件。
3、合约的编译
能够依照图示进行操作!
当咱们选中 constracts 文件夹下的一个智能合约后:
- 点击 1 进入编译页面
- 注意事项 图示 2 处能够切换编译时所用 solidity 版本号,须要在图示 3 处所显示版本号内
- 点击 4 实现编译
4、合约的部署 - 切换至 1 所在页面
- 因为咱们所选合约为 1_Storage.sol,通过浏览能够发现该合约无需初始化参数 间接点击 2 所示 Deploy 即可实现部署
5 合约的测试 - 能够看到 合约部署后 remix 即可间接调用合于暴漏出来的办法进行测试 简略高效的体验到合约开发流程
通过 Remix,你能够编写、编译、部署和测试你的 Solidity 智能合约,以及与它们进行交互。
2 solidity 智能合约的根本构造
通过浏览 remix 提供给咱们的 合约示例,我想只有有其余语言开发教训的同学,大多都能够看懂 示例中的智能合约要做什么事件,因而上手智能合约并不是什么难事。接下来小编就和大家一起理解一个智能合约的根本构造
智能合约的根本构造由版本申明、合约申明、状态变量、合约函数形成(事件、润饰器、构造函数 按招理论须要编写)
pragma solidity >=0.8.2 <0.9.0;contract MyContract { // 状态变量 uint256 public myNumber; address owner; // 事件 event NumberSet(uint256 number); // 润饰器 modifier onlyOwner() { require(msg.sender == owner, "Only the contract owner can call this function"); _; } // 构造函数 constructor(uint256 num,address ownerAdd) { myNumber = num; owner = ownerAdd; } // 函数 function setNumber(uint256 number) public { myNumber = number; emit NumberSet(number); }}
- 1、版本申明:pragma solidity ^0.8.0; 示意 Solidity 的版本申明,指定了合约所应用的 Solidity 版本(也能够写成版本区间)。
- 2、合约申明 contract 关键字:contract MyContract { ... } 定义了一个合约,合约名为 MyContract。
contract MyContract { // 合约代码}
- 3、状态变量是永恒地存储在合约存储中的值 构造 数据类型 + 可见性 +变量名 ,留神可见性如果是 public 能够省略 。至于状态变量数据类型因为篇幅限度,同学们能够到官网自行学习。
uint256 public myNumber; // public 公共状态变量合约内部能够拜访 address private owner; // private 函数和状态变量仅在以后定义它们的合约中应用,并且不能被派生合约应用 bool internal isInitialized; // 只能是外部拜访(即从以后合约外部或从它派生的合约拜访)
- 4、合约函数:function setNumber(uint256 number) public onlyOwner { ... } 定义了一个公共(public)函数 setNumber,它承受一个无符号整数参数 number。函数能够执行合约的逻辑操作,批改状态变量或与其余合约进行交互。在上述例子中,setNumber 函数批改了 myNumber 的值,并收回了 NumberSet 事件。
- 5、事件 事件是能不便地调用以太坊虚拟机日志性能的接口:event NumberSet(uint256 number); 申明了一个事件(event)NumberSet,它定义了一个在函数执行时触发的告诉机制。事件能够用于在区块链上记录重要的状态变动或告诉内部应用程序。 申明 event + 事件名 调用:emit + 事件
contract MyContract { uint256 public myNumber; event NumberSet(uint256 number); // 事件 function setNumber(uint256 number) public { myNumber = number; emit NumberSet(number); //触发事件 }}
- 6、润饰器:modifier onlyOwner() { ... } 是一个润饰器(modifier),用于批改合约函数的行为。润饰器能够增加额定的验证逻辑或访问控制机制。在上述例子中,onlyOwner 润饰器确保只有合约的所有者能力调用特定函数。
- - 7、构造函数:constructor() { ... } 是一个非凡的函数,用于在合约部署时进行初始化。构造函数在合约创立时主动执行,并且只能执行一次。
3 小试牛刀
这里咱们编写一个记录本人每月总贷款的合约 蕴含 totalmoney 总贷款合约变量 反对 支出两个合约函数
pragma solidity ^0.8.0;contract SavingsContract { uint256 public totalMoney; function spendMoney(uint256 amount) public { require(amount <= totalMoney, "Insufficient funds"); totalMoney -= amount; } function addIncome(uint256 amount) public { totalMoney += amount; }}
想理解 solidity 具体开发细节的请移步官网:
solidity 中文网官网链接 https://solidity-cn.readthedocs.io/zh/develop/installing-soli...