前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >First Solidity App

First Solidity App

作者头像
孟斯特
发布2024-05-28 20:36:39
810
发布2024-05-28 20:36:39
举报
文章被收录于专栏:code人生code人生

First App

在前文Hello World with solidity介绍了什么是 Solidity、Solidity 的合约结构以及如何使用Remix IDE[1]开发和测试智能合约。

在前文的例子里,合约只是简单的输出“Hello, world!”,我们无法与合约进行更多的交互。现在我们编写一个稍微复杂的合约,该合约实现加减操作:

get():获取当前变量的值•addition():变量+1•subtraction():变量-1

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract Counter{

    // 定义了一个状态变量,将会存储在链上
    // public表示该变量在合约外是看查看的
    int256 public count;

    // 查询链上当前的值
    // 因为需要从链上查询,所以需要使用 view
    // 如果不存链上查询,可以使用 pure 
    function get() public view returns(int256){
        return count;
    }

    // 每调用一次,count+1
    function addition() public {
        count += 1;         
    }

    // 每调用一次,count-1
    function subtraction() public {
        count -= 1;        
    }

}

合约说明:

1.// SPDX-License-Identifier: MIT: 这不是Solidity的关键字,而是文件顶部的版权许可声明。它指定了使用哪个开源许可。在这个例子中,使用的是MIT许可。2.pragma solidity ^0.8.24;: pragma用来声明Solidity编译器的版本号。^表示适用的solidity版本及其补丁版本。在这个例子中,编译器版本设定的是0.8.24。3.contract: 这是用来声明智能合约的关键字。所有在括号 {}中的代码组成了合约的主题。在这个例子中,合约的名字是Counter。4.int256: 这是Solidity的一个数据类型,代表256位整数。在这个例子中,count被声明为int256类型。5.public: 这是一个可见性修饰符。在这个例子中,它表明count变量和下面的函数可以在合约外部被访问。6.function: 这是用来声明合约内的函数的关键字。在这个例子中,它被用来声明get, additionsubtraction函数。7.view: 这是一个函数状态修饰符,表示这个函数不会修改合约的状态变量。在这个例子中,它应用于get函数。8.returns: 这个关键字用于声明函数返回的变量类型。在这个例子中,get函数返回一个int256类型的数。9.+=-=: 这是算数运算符,用于增加或减少变量的值。在这个例子中,它们分别在additionsubtraction函数中被用来改变count值。

扩展知识

可见性修饰符

在Solidity中,有四种函数可见性修饰符:

1.public :公开的,可以在合约内外部调用。这是默认的修饰符。2.private :私有的,只能在当前合约内部调用,不能通过其他合约或者transaction调用。3.internal :内部的,与 private 类似,只能在当前合约或继承此合约的合约中调用,但不能通过transaction调用。4.external :外部的,只能在合约外部(通过transaction或者使用this.function方式)调用。

选择合适的可见性修饰符可以帮助优化智能合约的gas消耗。具体来说,external修饰的变量比public更便宜,因为其跳过了一些可能导致的内部函数调用的复制操作。然而,如果一个函数被定义为external,那它不能在合约内被其他函数调用

此外,状态变量,示例中的count,也有其自己的可见性:

public :公开的。对于公开的状态变量,Solidity将自动创建一个getter函数,使得外部可以访问此状态变量的值。•private :私有的。只有当前合约可以访问该状态变量。•internal :内部的。只能在当前合约或继承此合约的合约中访问该状态变量。

这些可见性修饰符都可以帮助你更好地管理合约的权限和数据安全。

函数状态修饰符

在Solidity中,函数状态修饰符用于更改或调整函数的行为。以下是在Solidity中可用的状态修饰符:

1.pure: 这种修饰符提醒读者该函数不会尝试读取或改变状态。也就是说,该函数不会读取或修改合约的状态。2.view: 这种修饰符告诉阅读者该函数不会尝试修改状态。也就是它不会修改合约的状态,但它可以读取当前合约的状态信息。3.payable: 这种修饰符允许函数接收以太币。如果一个函数被声明为可付费的,那么当调用它时可以附带以太币值。4.nonpayable: 这是默认的修饰符,表示函数不能接收以太币。5.revert: 此修饰符与assert类似,也会终止并回滚所有改变,但是,revert将不消耗所有剩余的gas,而assert会消耗所有的gas。

除了这些,还有一些自定义的状态修饰符可以用于实现特定的功能。比如,一些合约可能会定义一个只有所有者可以执行的状态修饰符,称为"onlyOwner"。这些自定义修饰符的用法可以根据具体的应用场景和需求来调整。

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)[2]进行许可,使用时请注明出处。 Author: mengbin[3] blog: mengbin[4] Github: mengbin92[5] cnblogs: 恋水无意[6] 腾讯云开发者社区:孟斯特[7]

References

[1] Remix IDE: https://remix.ethereum.org/ [2] 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh [3] mengbin: mengbin1992@outlook.com [4] mengbin: https://mengbin.top [5] mengbin92: https://mengbin92.github.io/ [6] 恋水无意: https://www.cnblogs.com/lianshuiwuyi/ [7] 孟斯特: https://cloud.tencent.com/developer/user/6649301

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 孟斯特 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • First App
  • 扩展知识
    • 可见性修饰符
      • 函数状态修饰符
        • References
        相关产品与服务
        云开发 CloudBase
        云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档