大家好,今天来为大家解答深入浅出:以太坊全栈开发之合约编写指南(第三部分)这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
solidity
部署后,每个合约都有一个地址。 (如帐户地址)
部署合约实际上就是发送一笔交易。
remix_deploy.png
一、代码
//合约类似java类
合约简单存储{
//public 实际上创建了一个getter 函数。
//隐式定义为存储
uint256 公共最爱编号=0;
函数存储(uint256 _favNumber)公共{
最爱编号=_最爱编号;
}
函数检索()公共视图返回(uint256){
返回最爱号码;
}
}
二、访问权限
只有适当设置访问权限才能避免漏洞。
public/private
public实际上创建了一个getter函数favNumber(),
Private 表示该合约是唯一可以调用favNumber() 的合约。
external
仅在合约外可见
internala
只能读取此合约或继承它的合约。
三、storage/state
四、函数标识
solidity_func1.png 红色store调用会产生gas,表明合约状态已被修改。
Gas(transaction cost,不是execution cost)仅在合约状态改变且发生交易时支付。
view
只会读取此合约的状态(如favNumber)。
查看功能不允许修改任何状态,不会产生gas。
当store调用retrieve()时,需要支付retrieve()的执行成本gas。
pure
甚至不读取合约状态,只执行简单的内存操作
纯函数也不允许修改任何状态。
不允许读取区块链数据(所以不能)。
总结
调用视图函数是免费的,除非你在消耗gas的函数中调用它。
五、变量的数据位置
函数输入参数和局部变量需要指定变量的数据位置(内存、calldata),如
solidity_var1.pngsolidity_var2.pngmemory 和calldata 表示这个变量只是暂时存在,并且只是在调用这个addPerson() 函数的事务期间暂时存在。
存储存储变量甚至存在于执行函数之外。
memory
只有可修改的临时变量、字符串、数组、结构体和映射才需要添加内存。
uint不需要加内存,默认的。
solidity_var4.pngsolidity_var5.png
calldata
与内存类似,但不可修改的临时变量
solidity_var3.png
storage
例如全局变量uint256 public favNumber=0;隐式定义为存储。
六、部署
部署到NetaMask 钱包正在连接的测试网络。
solidity_dep1.pngsolidity_dep2.png 确保首先使用测试水龙头收集一些代笔。部署需要支付gas。
单击部署。这时候MetaMask插件就会提示你。单击将其打开。
Solidity_dep3.png点击确认
solidity_dep4.png 点击etherscan 上查看
solidity_dep5.png 可以看到合约已经通过account1账户部署到测试链上。
from 是account1 地址。
to是刚刚创建的合约地址,可以点击打开。
你可以看到gas限制和gas使用量比简单发送以太币(23,000gas)要高得多。
solidity_dep6.png Solidity_dep7.png 可以看到合约下的第一笔交易:创建合约。
您可以点击Remix上的按钮在测试网络上进行测试。
点击检索等查看功能不需要gas,因此不会弹出浏览器MetaMask插件。
点击store这个修改区块链的功能需要gas,所以会弹出浏览器MetaMask插件进行确认(在etherscan上可以看到store交易)。
solidity_dep8.pngsolidity_dep9.pngsolidity_dep10.png 测试链的部署可能需要很长时间,所以本地启动
在RemixVM(上海)上调试,然后部署到测试链Injected Provider上。
添加两个用户addPerson需要MetaMask弹窗确认两次才可以执行。结果如下:
solidity_dep12.pngsolidity_dep11.png
七、切换测试网络
只需切换MetaMask,Remix 就会自动感应到。
八、按钮颜色类型
蓝色:查看方法,不修改外链内容,免费。
橙色:修改链内容并支付gas。
红色:有需要支付的转账行为,方法中会使用msg.value。
例如FundMe的fund()函数。
如果你只收到金币,它仍然会像withDraw一样是橙色的
九、继承、重写
用于表示继承。重写时,父类是虚的,子类是重写的。支持多重继承。合约简单存储{
函数存储(uint256 _favoriteNumber)公共虚拟{
最喜欢的号码=_最喜欢的号码;
取回();
}
}导入"./SimpleStorage.sol";
合约ExtraStorage 是SimpleStorage {
函数存储(uint256 _favoriteNumber)公共覆盖{
最喜欢的号码=_最喜欢的号码+ 5;
【深入浅出:以太坊全栈开发之合约编写指南(第三部分)】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
学习区块链太cool了!终于要开始写合约了,感觉能掌握更多的技能。
有8位网友表示赞同!
以前听过一些合约的概念,现在正式来学习这方面知识真的很有期待!
有14位网友表示赞同!
以太坊的合约语言 Solidity 比较难学吗?有什么好的入门资源可以推荐吗?
有20位网友表示赞同!
写合约需要考虑什么因素?有没有哪些需要注意的陷阱和安全问题?
有19位网友表示赞同!
想了解一下合约部署到区块链上的过程,步骤是怎么样的?
有19位网友表示赞同!
学习区块链全栈,掌握合约编写很重要,感觉职业发展前景很棒!
有17位网友表示赞同!
期待更多关于以太坊合约编写的案例讲解和实战经验分享!
有5位网友表示赞同!
写出安全的合约非常关键,想了解一下如何进行安全审计和测试?
有9位网友表示赞同!
CONTRACT 是区块链开发的核心部分,学习起来真的蛮 challenging 的!
有10位网友表示赞同!
希望能找到一些关于以太坊合约的开源项目案例参考学习!
有8位网友表示赞同!
学习合约的知识背景应该是相关的计算机科学基础吧?
有17位网友表示赞同!
有没有一些专门针对合约编程的高级技巧和优化方法可以分享?
有13位网友表示赞同!
区块链产业发展越来越快,掌握合约编写技能竞争优势很大!
有5位网友表示赞同!
写合约需要考虑代码的可读性和可维护性吗?有没有一些最佳实践可以参考?
有10位网友表示赞同!
有些大型智能合约平台有哪些安全保障机制和底层技术?
有13位网友表示赞同!
想了解一下以太坊最新的合约开发工具和框架,它们有什么优势?
有20位网友表示赞同!
学习区块链全栈的规划应该是怎样的?什么顺序比较好学习?
有18位网友表示赞同!
学习合约编写的过程中遇到困难怎么办?有没有一些社区资源可以求助?
有19位网友表示赞同!
未来合约的发展趋势是什么样的?哪些技术方向值得关注?
有7位网友表示赞同!