提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
二、智能合约的代码结构
三、一个合约如何调用另一个合约当中的函数
四、智能合约中比较特殊的一类函数
五、智能合约的创建和运行
六、汽油费
七、错误处理
八、嵌套调用
九、合约可以获得的区块信息
十、合约可以获得的调用信息
十一、合约中的地址类型
前言
今天看了北大肖臻老师《区块链技术与应用》公开课,有很大收获,在此写博客以做笔记,加深印象,若有不当之处,欢迎斧正。
一、什么是智能合约?
智能合约是运行在区块链上的一段代码,代码的逻辑定义了合约内容 智能合约的账户保存了合约当前的运行状态 balance:当前余额nonce:交易次数code:合约代码storage:存储,数据结构是一棵MPT3. Solidity是智能合约最常用的语言,语法上与JavaScript很接近
二、智能合约的代码结构这个图显示了solidity的代码结构(由于CSDN的图片不能拉长,图片没有清晰展现,很抱歉)
第一行声明了solidity的版本号,不同版本的solidity在语法上是有些许区别的solidity是面向对象的编程语言,这里的contract就类似于Java中的classsolidity是强类型语言,定义的状态变量与C++这些语言是比较接近的,当中的address类型是solidity当中特有的 三、一个合约如何调用另一个合约当中的函数 在合约B中通过创建合约A的实例来调用A当中的函数 使用这种方式可以避免调用其它合约出错时本次调用被回滚 四、智能合约中比较特殊的一类函数当需要fallback函数拥有接受转账的功能时,则应加上payable关键字 五、智能合约的创建和运行 六、汽油费 汽油费是你发起一笔交易时需要额外支付的交易费,也就是说你想要矿工帮你打包你的交易,或者执行你的一个关于智能合约的交易你是需要给钱的每一笔交易都会根据执行该笔交易所消耗的资源来收取汽油费,每一笔交易都有一个gaslimit,也就是发起者自己设置的该笔交易的汽油费,当执行该交易时会全部扣除gaslimit大小的汽油费,再根据实际执行情况来返还剩余汽油费,如若汽油费不够就会引起回滚,但不会返还扣除的汽油费 七、错误处理 以太坊中的交易具有原子性,一个交易要么全部执行要么不执行,不会出现执行到一半的情况,这个交易包括转账交易也包含智能合约的交易,也就是说如果一个智能合约执行到一半出错了,那么会导致整个交易的回滚 八、嵌套调用 有些情况下从表面上看你并没有调用函数,比如说你发起一笔转账,但如果这个收款账户时合约账户的话就不一样了,你的这个 *** 作可能会调用合约的fallback函数 九、合约可以获得的区块信息
十、合约可以获得的调用信息
十一、合约中的地址类型
这些成员函数的语义和我们直观上的感受不一样,例如:address.banlance()这个函数是查看这个地址中的余额,但address.transfer(123456)的意思却是合约账户向该地址转账123456wei
总结
智能合约是以太坊的特点也是以太坊非常重要的一部分
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)