在Remix中编写你的第一份智能合约

这篇具有很好参考价值的文章主要介绍了在Remix中编写你的第一份智能合约。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

智能合约简单来讲就是:部署在去中心化区块链上的一个合约或者一组指令,当这个合约或者这组指令被部署以后,它就不能被改变了,并会自动执行,每个人都可以看到合约里面的条款更深层次的理解就是:这些代码会被去中心化地执行,就像一群人运行了某个软件,这意味着没有一个人或者一个主体可以修改这些合约或者更改条款。

1.智能合约行业应用

DeFi:代表去中心化金融,它让用户可以参与到金融市场,而不需要经过中心化中介。
比如Robinhood,你不需要再信任Robinhood会持续给你提供服务,让你接入市场,相反,你可以直接查看智能合约,对,这样就可以进入市场。或者在2008年金融危机,你再也不用相信,这些集团和机构会在后台给你提供正确的信息,你在区块链上就可以看到所有的东西,它们都是透明的。你可以简单,安全和高效的参与很多事情,像是货币市场和复杂的金融产品,截止到2022年为止,有大概2000亿美元的资产在DeFi中被管理,并且还在快速增长。
Dao:去中心化自治组织,是另一个应用。Dao是完全被去中心化管理的组织,它们被区块链上的一组指令或者一个智能合约管理,这样的管理方式很有优势,参与更加简单,规则黑白分明,并且你可以直接在链上看到所有的事情。投票和治理,使用的是完全去中心化的技术,区块链是能够让我们推动治理技术进步的重要技术之一。它让治理更加的高效,公平和合理。
NFT:即非同质化代币,它在某种程度是一种电子艺术品,或者是一个独一无二的资产。像是无聊猿和加密朋克这样的项目,革新了人们获得报酬的方式,人们可以通过工作,展示创造性和状态而获得报酬

2.Remix介绍

Remix是一个强大的工具,因为它有很多功能,帮助我们查看和交互智能合约,虽然我们会渐渐脱离Remix,使用本地开发环境,但是Remix对学习智能合约基础非常有帮助,Remix官网。
当你进入Remix页面,你会发现有很多东西,还有很多Plugin,因为我们要使用Solidity,也就是智能合约的语言。
remix 合约,区块链,智能合约,区块链

3.Solidity数据类型

Solidity有多种基础数据类型,最基础的四种数据类型是,boolean,uint,int和address。 还有数组(array)、结构体(struct)和映射(mapping)或者还有bytes,它们是一种更底层的数据类型。
boolean定义true和false;
uint是无符号整数,表示这个数字不是可正可负,只能是正数;uint比较特殊,我们可以决定给它分配的空间,这个数字一直可以大到uint256,uint默认就是uint256。通常,把分配空间显式的写出来是一个好习惯。
int可以表示正数或负数;同样的,我们也可以决定分配给int变量的空间。
address表示地址,就像在MetaMask中看到的地址一样。
具体在Remix定义的变量类型代码如下所示:

// SPDX-License-Identifier: MIT
// 定义solidity的版本 此处允许0.8.8以上的版本,但不允许0.9.0以上的版本
pragma solidity ^0.8.8 <0.9.0;

contract SimpleStorage{
    bool hasFavoriteNumber = false;
    //uint允许分配的空间只能以byte的速度增长 uint8 uint16...uint256 最大只能到uint256
    uint256 favoriteNumber = 123;
    int64 favoriteInt = -5;
    string favoriteNumberInText = "five";//string类型变量只允许存储文本
    address myAddress = 0x993CC624c1350D52cCbe32F77652362F82fc4D41;
}

4.Solidity函数

函数或者方法指的是独立模块,在我们调用的时候会执行某些指令。Solidity中定义函数与JavaScript中类似,使用function关键字即可。
函数变量有四种可见度标识符:
public:在外部和内部都可见,任何与合约交互的人,都可以看到被public修饰的变量和函数,给变量或函数加上public修饰符,实际上给给其创建了getter函数,创建一个返回其值的函数。
private:private表示只有这个合约可以调用这个函数,private表示只对合约内部可见;
external:external表示只对合约外部可见
internal:internal表示只有这个合约或者继承它的合约可以读取
一般变量或函数的修饰符的默认值是internal,表示只对本合约和继承合约可见
另外,solidity中还有两个关键字可以用来修饰函数,标识函数的调用不需要消耗gas,分别是view和pure,如果一个函数被view修饰,意味着我们只会读取这个合约的状态。被view修饰的函数不允许修改任何状态,你在其函数中不能修改任何状态,同理,pure函数也不允许修改状态,同时pure函数也不允许读取区块链数据。pure函数通常用于执行数学运算或其他不涉及状态更改的计算。
具体关于函数实现的solidity代码如下所示:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8 <0.9.0;

contract SimpleStorage{
    //uint允许分配的空间只能以byte的速度增长 uint8 uint16...uint256 最大只能到uint256
    uint256 public favoriteNumber = 123;//设置公开可见
    function store(uint256 _favoriteNumber) public {
        favoriteNumber = _favoriteNumber;
    }

    function getFavoriteNumber() public view returns(uint256){
        return favoriteNumber;
    }
    function testPure() pure public returns(uint){
        return (1+1);
    }
}

5.Mapping映射

使用mapping映射比数组遍历查找元素更加高效,可以达到O(1)级别,而数组遍历是O(n)级别;
你可以简单把映射想象成字典,它是一组键值对,每个key键返回与该键关联的某个value值,我们创建一个映射变量的方式与创建其他所有变量的方式完全相同;具体如下所示:

mapping(string => uint256) public nameToFavoriteNumber

具体有关映射的定义以及添加元素的操作如下所示:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8 <0.9.0;

contract SimpleStorage{
    //uint允许分配的空间只能以byte的速度增长 uint8 uint16...uint256 最大只能到uint256
    uint256 public favoriteNumber = 123;//设置公开可见
    struct People{
        string name;
        uint256 favoriteNumber;
    }//定义结构体
    //定义映射
    mapping(string => uint256) public nameToFavoriteNumber;
    People[] public people;//定义结构体数组(存储多个结构体的数组)

    function store(uint256 _favoriteNumber) public {
        favoriteNumber = _favoriteNumber;
    }
    //这里被view修饰的函数调用不消耗gas 表示只读函数 不修改或改变区块链已有的状态
    function getFavoriteNumber() public view returns(uint256){
        return favoriteNumber;
    }
    //定义添加数组元素的函数
    function addPerson(string memory _name,uint _favoriteNumber) public{
        //这里由于string底层数bytes数组,因为需要使用memory关键字
        people.push(People(_name,_favoriteNumber));
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}

这里需要注意,代码里面有关于数组和结构体的定义与实现,由于其与Java和C++定义方式类似,这里读者可以类比理解,所以并没有做详细阐述。

6.EVM介绍

前面我们通过solidity编写的所有合约代码,它都是在EVM(Ethereum Virtual Machine)上编译的。
EVM(Ethereum Virtual Machine)就是往以太坊区块链上部署智能合约的一个标准,并且任何实现某种EVM的区块链,你都可以把solidity代码部署上,例如Avalanche,Fantom,Polygon,它们都是与EVM兼容的,意思就是我们可以把编写的solidity代码部署到这些区块链上。
回顾整个智能合约:
在智能合约中你要做的第一件事就是告诉solidity,你正在使用哪个版本的solidity,并且你得在首行添加// SPDX-License-Identifier: MIT,从而消除警告信息,接着你就要使用关键字contract创建你的合约对象并为它命名,solidity中的合约(contract)就类似与其他面向对象语言中的class类,并且花括号{}内的所有内容都是该合约的组成部分。
solidity中有许多不同的数据类型,例如无符号整形uint,布尔值(boolean)、字符串(string)、字节(bytes32) 等等。如果你想创建一种新类型,可以创建一个所谓的结构体(struct),也可以创建数组(array)或者说列表(list),也可以创建字典(dictionary)或者说映射(mapping),当你给它一个键(key)时,它就会返回该键对应的值(value)。我们还可以在solidity中创建函数,以修改区块链的状态,函数使用view和pure修饰便表示是不修改区块链状态的函数,我们也可以在函数中指定不同的数据位置,calldata和memory的意思就是该数据只是临时数据,它们只在函数运行期间存在,storage变量则是永久存在的,而函数参数由于是临时变量因此不能使用storage变量,当我们编写好solidity代码并在Remix点编译(compile),它就会将代码按照以太坊虚拟机的格式进行编译。
编写好智能合约代码后,在Remix可以直接使用快捷键Ctrl+S编译,编译成功后会在侧边栏出现一个绿色的小图标,然后点击侧边第四个图标进入部署界面,首先选择虚拟账户,因为我们是部署到Remix自带的虚拟机中,然后设置gas limit限制,然后点击部署按钮即可,部署成功后便可以看到自动生成了一个合约账户,到此,你便完成了你的第一份智能合约。

remix 合约,区块链,智能合约,区块链文章来源地址https://www.toymoban.com/news/detail-758555.html

到了这里,关于在Remix中编写你的第一份智能合约的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Remix本地化,加载本地合约文件,本地链接Remix

    智能合约IDE,在线的比较卡,而且切换网络面临文件丢失的风险,选择本地搭建Solidity本地编辑环境,Remix-IDE + Remixd组合,加载本地合约代码。这里用到两个工具: Remix IDE(本地IDE)+ Remixd (链接) Remix IDE 项目源码:https://github.com/ethereum/remix-project 介绍: Remix IDE是一个本地部署运

    2024年02月13日
    浏览(58)
  • remix 在线编译部署合约示例

    一 准备工作 1.打开 Remix - Ethereum IDE 2. 启用或关闭需要的工具 1.选择需要编译的合约 2.进入编译页面,版本号选择必须大于等于当前合约使用的版本,点击Compile 3. 编译成功页面如图 三.部署 页面选择injected web3 即可连接本机的metamask(前提matemask已连接)

    2024年02月05日
    浏览(34)
  • 如何在vscode、remix中结合hardhat编译部署合约

    首先创建 npm 空项目,注意这里要选择合约项目对应的文件目录,比如这里的合约项目是 suchas 接着安装 hardhat 环境,这里安装的版本 2.11.1 接着创建 hardhat 工程,选择你要创建的工程类型,这里我选的 TS 一般简单的测试学习我们可以用 remix,更多时候是用专业的 vscode IDE 编写

    2024年02月06日
    浏览(36)
  • FISCO BCOS十三、通过Truffle和remix实现合约自毁漏洞(以及修复方法)

    上一篇我写了通过Truffle和remix复现智能合约的溢出漏洞(以及修复方法),这一篇让我们来了解一下合约另外一个漏洞--自毁漏洞。 我们先来了解 solidity 中能够转账的操作都有哪些: transfer :转账出错会抛出异常后面代码不执行; send :转账出错不会抛出异常只返回 true/f

    2024年03月16日
    浏览(62)
  • Solidity入门:我的第一段智能合约

    以太坊是一个全球性的、去中心化的金融和新型应用程序平台。在以太坊,我们可以通过智能合约代码来控制资产,并建立世界上任何地方皆可访问的应用程序。今天我们自己动手来写一段简单的智能合约代码,探索一下智能合约的奥秘。 【智能合约】 智能合约(英语:S

    2024年01月16日
    浏览(54)
  • 使用Ganache,web3js和remix在个人区块链上部署并调用合约

    Ganache是一个运行在本地的个人区块链,适用于以太坊的开发者。 首先我们需要下载Ganache web3js的中文文档 remix英文版的网址 有以上的准备之后我们就可以开始了 首先启动Ganache 这就是Ganache的主页面,下面有10个供我们使用的账号,上面有他们的地址以及余额,我们暂时需要

    2024年01月19日
    浏览(74)
  • Midjourney 【系列教程2】人工智能艺术创作从入门到精通·基础篇2:生成你的第一幅 AI 作品

    这期的教程我想一定会令你感到兴奋和激动。因为,我们即将开始生成属于自己的第一幅 AI 作品了! 在这里,我将会按照一个真实的例子带大家一步步进行,重点步骤及注意事项部分我将用红色文字或彩色文字为大家标出。 首先,进入你的 Discord 服务器,并在下面的对话框

    2024年02月08日
    浏览(51)
  • Ascend C保姆级教程:我的第一份Ascend C代码

    本文分享自华为云社区《Ascend C保姆级教程:我的第一份Ascend C代码》,作者:昇腾CANN 。 Ascend C是昇腾AI异构计算架构CANN针对算子开发场景推出的编程语言,原生支持C和C++标准规范,最大化匹配用户开发习惯;通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提

    2024年02月10日
    浏览(40)
  • 官方认证,区块链从业者秋天的第一份上岗证书来啦!

    “人社证书已经到了!” 10 月 8 日,《区块链应用操作员》证书正式下发到每一位通过区块链应用操作员技能考试的学员手中,他们从此有了官方认证的从业“身份证”。 今年 7 月 31 日,浙江省第二批区块链应用操作员(四级)技能考试在浙江清华长三角研究院技能人才评

    2024年02月16日
    浏览(41)
  • Remix介绍

    编写和交互智能合约的集成开发IDE Remix - Ethereum IDE 使用Solidity插件 开始编写Solidity代码 任何一个智能合约中,都需要先声明Solidity的版本,定义一个license,一般使用MIT协议,有些编译器不写license会报错 点击编译这个文件 定义智能合约部分: 部署智能合约:部署一个合约其

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包