区块链–以太坊智能合约编程学习笔记


合约的科普知识

在以太坊虚拟机上,合约程序自动执行,无法被人类干预。一旦部署无法修改。每次执行合约即需要消耗GAS,所以,像C语言一样严谨是必要的。我戏称它为:业务C语言

开发

→编程的语法

  • 开头
pragma solidity ^0.50意味着所使用的编译器,0.50<=编译器版本<0.60
  • 状态变量和函数
示例-1

→可见修饰符含义

→→public与private

对于public和private,相信学过其他主流语言的人都能明白:
  • public修饰的变量和函数,任何用户或者合约都能调用和访问。
  • private修饰的变量和函数,只能在其所在的合约中调用和访问,即使是其子合约也没有权限访问。

→→external和internal

除 public 和 private 属性之外,Solidity 还使用了另外两个描述函数可见性的修饰词:internal(内部) 和 external(外部)。
  • internal 和 某些面向对象的protected关键字类似,如果某个合约继承自其父合约,这个合约即可以访问父合约中定义的“内部”函数。
  • external 与public 类似,只不过这些函数只能在合约之外调用 – 它们不能被合约内的其他函数调用。只能修饰函数不能状态变量。

→→函数是否改变状态修饰符

  • view—可读状态变量,但不能修改
  • pure—不能改也不能读状态变量,是更加严格,而不是与view相反

→→payable修饰符

可以理解成事务,只有被其修饰,函数才有变动账户资金的权利。

→→存储位置修饰符

可以出现在变量或者函数参数前。对于值类型来说,永远是引用传递,而引用类型时,需要参考下面的修饰符来确定是否是引用传递。
  • storage:链上的持久存储的。
  • memory:EVM中的内存,可易失的。不能将memory类型赋值给局部变量(有待考证,因为引用传递下可以改变其赋值)。
示例-2
  • calldata:EVM中的内存,只读的。外部函数的参数(不含返回值),场景多为系统使用。
示例-3
示例-4
示例-5

→货币单位

示例-6

→编译器和开发框架

三种主流的:remix-ide ,solc和jssolc
  • truffle框架使用
https://www.jianshu.com/p/8794afea1996?from=timeline&isappinstalled=0https://truffle.tryblockchain.org/https://www.jianshu.com/p/eac99bb0a9bc

→技巧参考

  • 函数deposit和send的使用
https://blog.csdn.net/tianlongtc/article/details/80220142