2022智能合约开发指南(一)

2022智能合约开发指南(一)

前言

最近几年智能合约的发展很快,迭代也很快,有很多经典教程由于合约升级的问题已经无法运行起来。所以我决定去写一篇最新版的合约开发教程。在这个教程里我会聚焦到开发本身,不会阐述过多区块链的知识,因为区块链知识永不过时,也被很多大神讲的通透了。

所以我希望你在阅读这篇教程前了解区块链的基本知识(如公钥、私钥、gas等能知道大概是什么就可以),学过任意一门编程语言以便更快上手(不要求精通)。

什么是智能合约?

智能合约是运行在区块链网络上的一种承诺协议,它有如下特性:一旦执行则无法撤销和修改;一切写入记录皆可查询,无法造假;合约双方仅以链上地址表达身份,具备匿名性。

开发语言和开发环境

智能合约采用solidity语言开发,其语法类似Typescript,因此较为适合前端开发人员上手,很多大学都有JavaScript基础课,所以也较为适合大学生入门。

和其他语言一样,solidity也需要设置开发环境才能进行开发,如truffle、hardhat等,但是对新手来说,设置开发环境往往存在一定难度,直接把一部分潜在开发者拒之门外。所以在教程前期我将用一种在线开发环境来进行教学。

这个在线工具叫Remix,通过它可以访问远程运行环境,同时自带一个ide工具以便我们编写智能合约。

开发第一个合约吧

打开Remix链接,在左侧的workspace中会显示3个文件夹:

contracts solidity脚本(合约源码)scripts 合约部署脚本test 合约测试脚本

我们先点开contracts文件夹,会发现里面有几个.sol文件,这个格式的文件就是solidity脚本文件。我们先无视或者删掉它们(右键点文件名选delete)。

现在我们右键选中contracts,选择new file创建新的合约文件HelloWorld.sol,然后在右侧输入如下代码,关键代码已加注释:

// Solidity许可证,如GPL-3.0、MIT等,根据你的实际需要选择。 // SPDX-License-Identifier: GPL-3.0 // 编译器版本,类似.net或者java的版本,一般新的版本会引入更多特性,方便拓展功能。目前最新的版本为0.8.15,但不建议用太新的小版本。 // 因为有很多以太坊兼容链(如tron、bsc)都不支持最新的编译器,一旦我们需要部署在多个链上就会出现兼容问题,所以在大版本上选择最新的,小版本选择相对旧一些的。 // 当前编译器选择0.8.0以上版本。 pragma solidity >=0.8.0; //创建一个叫HelloWorld的合约,和ts中的class HelloWorld一致 contract HelloWorld{ // 构造函数,和ts一致 constructor(){ } // 类方法,和ts中的 public function sayHello():string 一致 // 这里的pure叫函数修饰符,表示这个方法是否修改了合约状态,每个函数都需要有这个关键词。后面会详解。 // returns表示这个函数返回的结果类型,solidity支持返回多个参数,所以用returns而不是return。括号中是返回类型描述。 // string memory表示这个返回的变量的存储在临时内存里,函数执行完会销毁。因为存储在内存中消耗的gas比较少,所以不需要永久保存的变量都放在memory中。 function sayHello()public pure returns(string memory) { return “Hello”; } }

现在我们准备编译合约,生成它的二进制代码

如果合约没有错误,那么左侧第三个图标会显示一个对号。有错误的话,会有红字提示错误的位置和原因。

现在将合约部署到测试网上。

部署成功后,屏幕左下方会显示部署好的合约(0XD8B…33FA是合约的链上地址)

点击sayHello按钮,会调用合约的sayHello方法,输出结果”Hello”

小结

这就是一个最基础的合约编写、部署和交互的过程,是不是不难。

下一课我们会继续扩展这个合约,学习更多的知识点。

该文章未经许可,禁止转载,谢谢。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注