面向老程序员的Solidity知识点有哪些

发布时间:2021-12-07 15:34:51 作者:iii
来源:亿速云 阅读:90

这篇文章主要介绍“面向老程序员的Solidity知识点有哪些”,在日常操作中,相信很多人在面向老程序员的Solidity知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”面向老程序员的Solidity知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1

EVM和字节码

与Java代码类似,Solidity代码会先被编译成字节码,然后再由EVM负责执行。从逻辑上来讲,可以将以太坊视为一台计算机,其中的每个EVM节点类似在计算机中执行的进程,分布式账本则是这台计算机的存储。

一旦部署成功,其代码会被复制到以太坊上其他节点,并可以通过命令查看其源码。以Truffle开发环境为例:

合约部署之后就无法更新,这就给开发者带来了相当大的挑战:

2

执行代价

说到程序执行的代价,一般指的都是花多少内存、存储和CPU时间。但执行以太坊上的代码,除了这些通常意义的代价之外,还需要真金白银。这是因为以太坊上的交易确认都是需要花钱的!它们主要是那些改变以太坊状态的操作,如:

而且,与其他系统不同,这些操作的执行结果并不会立刻生效。它们会以交易的形式提交到交易池中等待矿工确认,这便是交易费的由来。并且,这个价格也不是一个固定值,它随着市场行情的波动上下浮动。如果你的交易长时间没有结果,那么可以看看是否是因为交易费过低。

关于交易费的行情,可以从最新的交易(https://etherscan.io/txs)中了解。

这也给开发者带来了挑战:如何在实现功能的前提下尽可能的降低交易成本?

3

账户

要在以太坊上进行操作,必需要有以太坊账户。当前有两类账户类型:

这里也带来了一些关于安全性方面的概念转变:

4

合约语法

合约类似Java中的类,但与类不同之处在于,它的构造函数只会被调用一次,即部署合约的时候。

合约的状态变量相当于类的实例变量,但同样是持久化的。并且,mapping只能声明成状态变量但可在函数内引用。

变量类型同样也分值类型和引用类型,其中引用类型包括:数组和结构体,后者给自定义类型提供方案。

函数可以返回一个值或多个值,同时可以指定返回的变量。如:

function arithmetic(uint _a, uint _b)

    public

    pure

    returns (uint o_sum, uint o_product)

{

    o_sum = _a + _b;

    o_product = _a * _b;

}

函数修改器(Modifier)类似AOP中的拦截器,提供了修改函数执行流程的机会,一般用来做验证和检查。其中“_”用来将控制流返还给被修改的函数,如下例:

modifier onlySeller() { // Modifier

    require(

        msg.sender == seller,

        "Only seller can call this."

    ); 

   _;}

function abort() public onlySeller { // Modifier usage

    // ...

}

几个重要的修改器:

事件提供了让外部应用了解合约状态变化的途径,一般使用流程是:

可见性:

合约支持多重继承。

EVM提供了4种数据位置用来存放数据:

规则:

由于合约执行是有成本的,需要警惕循环语句。

对于多重继承的合约,需要明确指明顺序,如:

contract X {}contract A is X {}contract C is A, X {}

fallback函数没有函数名,无法直接调用,但在两个情况下会被触发:

由于其无法被外部调用,EVM限制其只能最多消耗2300的gas,若超过,则fallback函数失败。因此,记得要测试合约的fallback函数是否会超过这个限制。

并且,fallback是安全事故的高发地,需要对其进行必要的安全相关的测试。

接口和抽象合约跟Java中的接口和抽象类差别不大,库(library)是一段可复用的代码,在调用它的合约上下文内执行:

合约抛出异常之后,状态回滚,当前有3种方式:

5

常见模式

鉴于以太坊应用的以下特点,编写solidity代码时需要非常小心:

常见的编码套路有:

最后,也是最省事的方式:使用成熟类库,如OpenZeppelin。

到此,关于“面向老程序员的Solidity知识点有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. 和小鲜肉相比,老程序员有哪些优势?真正变老前该如何武装自己
  2. 面向.Net程序员的dump分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

solidity

上一篇:CDH集群升级事故的解决方法是什么

下一篇:怎么用MSinfo32解决Windows Server 2008 R2的疑难问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》