其他分享
首页 > 其他分享> > 以太坊智能合约开发:solidity精简速成版

以太坊智能合约开发:solidity精简速成版

作者:互联网

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

以太坊智能合约开发:solidity精简速成版


一、相关概念

  1. 以太坊:以太坊是一个分布式的平台,可以运行智能合约,应用程序按照既定的程序运行,不会出现停机、审查、欺诈或第三方干扰的可能性。一句话总结就是,以太坊就是一个基于区块链的智能合约平台。
  2. 智能合约:是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于1995年由Nick Szabo首次提出。
  3. 燃料gas:部署智能合约在以太网络中需要消耗一定的燃料(gas),gas需要用以太币进行兑换。

二、solidity编程基础

(1)引入其他源文件:①import “./filename.sol”; ②import * as symbol from “filename”;
(2)函数:function A{…}。
(3)合约:contract A{…}。
(4)接口:interface A{…}(接口只定义行为,没有实现)。
(5)库:library A{}(库没有fallback函数和payable关键字,不能定义storage变量)
(6)构造函数:constructor () public{manager = msg.sender; }
其他声明方法function()public{…}和function[与合约同名]{…}
(7)事件(event):

event Sent(address From, address To, uint Amount);//声明事件 Sent,用来记录转账过程
Function sent(address _From, address _To, uint _Amount){
	emit sent(_From, _To,_Amount);
}

事件和日志的主要用途:

(8)值变量:

(9)引用类型:

(10)字典映射:
字典是一种Key/Value对,通过映射(mapping)定义。映射本质上是存储和查找数据所用的键值对,类似于可以用任意类型表示下标的数组,mapping( Key=>Value)表示这个映射可以用Key类型作为下标,同时存储的值是Value类型。如: mapping (address => uint) public balance;(其中address是键的数据类型,uint是值的数据类型。可以用balance[x]获取uint类型的值,其中x是address类型)。

mapping (address => uint) public balances;
function reward (address receiver,uint amount) public {
	balances[receiver] += amount;  
	//balances[receiver]中,receiver是接收者的地址balances[receiver]是receiver这个地址中的余额。
}

(11)函数定义以及修饰符
函数定义:function <函数名> ([<输入参数类型1> <输入参数名1>],…) [internal(默认)|external] [pure|constant|view|payable] [returns([<返回参数类型1> <返回参数名1>],…)] {…}

modifier onlyOwner() {   
   require (msg.sender == owner,”only owner can call this function”);
  _;            //被onlyOwner声明的函数会被加到修饰定义里的_;之后执行。也就是说被声明的函数会在这里执行,否则就会引发异常调用
}                 
contract Mortal is owned{
	function close() public onlyOwner{....}   }

(12)数据位置Storage:可以被所有函数访问的全局变量。永久的存储,以太坊会把它存到公链环境里的每一个节点。消耗gas最多。
Memory:智能合约中的本地内存变量。它的声明周期很短,当函数执行结束后就被销毁了。消耗gas最少。
Calldate:所有函数调用的数据,包括参数的保存位置。
默认函数参数是memory,默认局部变量是storage;默认状态变量是storage。外部函数的参数被强制指定为calldate。
(13)继承:单继承contract A is B{…} | function A(…) B(…){…}
多重继承contract A is B{…} contract C is A,B{…}
(14)异常和错误处理:
Require函数:require (msg.sender == owner,”only owner can call this function”);
Revert函数:if(msg.sender != owner) revert(“only owner can call this function”);
通常与函数修饰器modifier一起用。
(15)常用全局变量:
msg.sender(address):消息发送者
(16)错误处理:
(17)结构体:struct A{…}

struct student{
        string name;
        uint256 age;
    }
    function init() returns (string,uint256){
        student memory s = student("XXX",87);
        student memory s2 = student({age:77,name:"SSS"});
        return (s.name,s2.age);
    }

标签:function,函数,以太,solidity,速成,uint,address,合约,public
来源: https://blog.csdn.net/weixin_44644635/article/details/123472821