一、智能合约概念介绍(Smart Contract)
智能合约是一组自动执行预定义规则的代码,类似于我们生活中的自动售货机。当用户选择商品并支付后,售货机会自动释放商品,用户不必担心交易的信任问题,因为售货机按照预设的程序操作。类似地,信用卡的自动还款也是一种实现了智能合约逻辑的机制:在设定自动还款之后,到期时系统会自动扣款。
智能合约的这一概念,在数字货币和区块链领域得到了更深入的应用和发展。2008年,一个化名为中本聪的人或团队发表了《比特币:一种点对点的电子现金系统》论文,这标志着比特币的诞生。比特币的底层技术框架,即区块链,后来成为了许多技术创新的基础。2013年,受比特币启发,维塔利克·布特林提出了以太坊概念,这被称为第二代区块链平台。以太坊的独特之处在于它引入了智能合约功能,使其不仅仅是一个数字货币,而是一个完整的编程平台。在以太坊上,任何掌握Solidity(这个语言与JavaScript的语法类似)的人,只要支付足够的矿工费,都可以编写和部署智能合约。
以太坊存在多个网络版本。最核心、也是交易价值最大的,被称为“主网络”或“主链”。此外,还有为了开发和测试目的而设立的“测试网络”。这些测试网络允许开发者免费获取测试用的以太币,以方便进行智能合约的测试和验证。此外,还可以自建私有的以太坊网络,称为“私链”。正因为这样的设置,让我们可以不需花费任何成本就能学习智能合约。
二、智能合约环境搭建
1.环境准备:
Chrome
MetaMask插件
Remix
2.常用测试链:
Goerli
Sepolia
3.必备网站:
以太坊区块链的信息查看:
真实链: https://etherscan.io/
Remix:Solidity语言的在线IDE:Remix – Ethereum IDE
4.使用的编程语言:
Solidity语言,这种语言类似JavaScript语言,下面的链接是我solidity的学习笔记
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your teamhttps://reveone.notion.site/Solidity-d33f8b95a9c74bb4817f471bbd88730a?pvs=4
三、智能合约基本操作演示:
1.在测试链上实现账户之间的交易:
首先我们需要先开第一个账户钱包,在chrome插件商城中下载Metamask,下载好后在插件栏中点击这只狐狸就会弹出一个注册界面:
在弹出的注册界面中进行账号注册,这里需要注意在注册的过程中会有一个账户助记词,可以用来恢复账户,需要存起来。其他就没啥难度,这里就不截图了。
创建完账户之后可以去测试链中先给自己的钱包点ETH(以太币):
自从Ropsten测试链关闭后感觉领取测试币变难了,这里介绍一下领取测试币的方法,首先打开小狐狸开启测试链网络,选择Sepolia测试链:
接着访问下面地址:
Sepolia FaucetA fast and reliable Ethereum Sepolia testnet faucet for blockchain developers.https://sepoliafaucet.com/
这个网站需要注册Alchemy的账号,注册好后将自己的钱包地址复制下来:
然后粘贴到下图中的输入框中点击send me。
稍等一会儿就可以看到钱包里面领取到了0.5测试币:
tips:这个网站每24小时只能领取一次。
第一个账户注册好并且钱包里面已经有钱之后,接着再创建第二个账户:
如上图选择账户右侧的下拉按钮,然后点击Add account,在弹出的输入框中输入账户名即可新建一个账户。
创建好两个账户就可以尝试实现账户之间的交易了,在一个账户与另外一个账户交易时首先需要知道对方的钱包地址,比如这里我的Account 1需要向Account 2中转0.1ETH,首先要复制Account 2的钱包地址也就是0x9开头的那一串十六进制值:
然后回到Account 1的操作界面,点击发送按钮:
在下图中输入Account 2的地址:
然后输入要转的数额后点下一步,然后确认0.1ETH就会转到Account 2的钱包中
2.部署智能合约:
这里先介绍一下Remix,这是一个开源的、基于Web的IDE(集成开发环境)和工具,专为以太坊智能合约的Solidity语言开发和部署而设计。在这个平台上可以部署测试我们的智能合约。Rimix 的网址为:
Remix – Ethereum IDEhttp://remix.ethereum.org/
首先打开Remix网站后,新建一个babysol.sol文件(solidity语言的文件后缀),将附件里的代码贴进去
pragma solidity >=0.4.22 <0.6.0;contract baby{ //声明了一个名为baby的合约address public owner; event own(address owner,string warn); constructor () public {owner = msg.sender;}function changeowner() public { owner = msg.sender;emit own(msg.sender, "owner changed!");}}
这里注意一下第一行代码,pragma表示的是solidity编译器的版本,这个代码的依赖的版本号为0.4.22到0.6.0。可以在网站的最右边选择编译器的版本,这里选择0.4.26,然后勾选Auto complile,编译器就会自动编译程序。
选择编译的下面那个图标,并在ENVIRONMENT中选择前面两个都可以:
这时MetaMask会弹出一个窗口,这里是想要申请相应权限:
这里将所有账户全部添加进去,之后就是下一步然后连接即可。
之后选择下方的黄底按钮(Deploy)将合约推送至测试链,点完之后注意到编译器下方显示的信息,这里会有一定的等待时间:
直到编译器下方出现一个对勾,就表示部署成功了:
此时左边窗格也会出现和合约交互的一个接口:
出现上述信息就表示合约部署成功了,接着尝试测试一下这个合约功能:
从代码中可以看到合约交互的接口有两个功能一个是变更合约的拥有者一个是查看当前合约的拥有者,这些功能都是之前代码写了的,这里详细分析一下代码:
pragma solidity >=0.4.22 <0.6.0; //编译器的版本contract baby{//声明了一个名为baby的合约address public owner; //owner是一个公开的状态变量,它用来存储合约的所有者的地址。event own(address owner,string warn); //own是一个事件,它可以被外部监听器监听到。当合约的所有者发生变化时,这个事件会被触发,同时会传递新的所有者的地址和一个警告消息。constructor () public { //constructor在JavaScript用于创建和初始化class,也就是构造方法owner = msg.sender; //当这个合约被部署到以太坊网络时,这个构造函数会被自动执行。msg.sender表示当前交易的发送者,也就是部署合约的地址。所以,这个构造函数的作用是初始化合约的所有者为部署合约的地址。}function changeowner() public { //构造函数owner = msg.sender;//这个函数允许任何人调用它来更改合约的所有者。调用这个函数的人会成为新的所有者。并且会触发own事件,通知外部监听者所有者已经发生变化。emit own(msg.sender, "owner changed!");}}
也就是说我们只要在MetaMask插件里换一个账户然后选择下面的changeowner按钮,合约的所有者就切换了:
至此智能合约基本操作的介绍就到这结束了,下一篇将对智能合约的漏洞进行介绍。