1、智能合约的基本组成

1.1.程序版本

1.2. 合约声明

1.3.状态变量

1.4.合约方法

在这里constant相当于他声明这个局部变量不能更改,但是他并没有实际作用(实际就只是警示作用)

2、地址adress

- address.balance  账户余额
- adress.transfer(value)   返回调用者
- adress.send(value)    返回调用状态
- adress.call,adress.callcode and adress.delegatecall  用在智能合约与智能合约彼此相互调用

3、ether单位

- wei
- szabo = 10^12wei
- finney=10^15wei
- ether=10^18wei

4、时间单位

- seconds
- minutes
- hours
- days
- weeks
- years

5、块

- block.blockhash(uint blockNumber) returns(bytes32)
- block.coinbase(adress)   谁挖到这个block
- block.difficulty(uint)    块难度
- block.gaslimit(uint)       gas限制(最多)
- block.number(uint)      块的序号
- block.timestamp(uint)  块创建时间
- now

6、消息msg

- msg.data   消息携带的参数
- msg.gas(uint)   函数调用者所携带的gas数
- msg.sender(address)   函数调用者
- msg.sig
- msg.value(uint)

7、单员工薪酬智能合约实例

pragma solidity ^0.4.22;contract Pay{uint salary = 1 ether;  //工资总额address frank =0x57ec6c8f13c46b43dcd28c83753dec9224d23ef2;  //frank的账户地址uint  constant payDuration = 30 days;   //发放薪资的周期uint lastPayday = now; function addFund() payable returns(uint){return this.balance;   //返回余额}function colculateRunway() returns(uint){return this.balance / salary;  //返回余额能够发放工资的次数}function hasEnoughFund() returns(bool){return this.colculateRunway() > 0;   //限制能够发放薪资的次数大于0次}function getPaid(){if(msg.sender != frank){revert();   //如果合约调用者不是frank 那么直接抛出异常}uint nextPayDay = lastPayday + payDuration; //如果重复使用一样的运算 第一是会浪费算力,还会浪费钱if( nextPayDay > now){revert(); //没到支付薪水时间}lastPayday = nextPayDay;frank.transfer(salary);}
}

8、错误检测

- assert(bool)  使用在程序运行时
- require(bool)  使用在程序输入时

9、多员工薪酬智能合约实例

pragma solidity ^0.4.22;contract Pay{uint  constant payDuration = 10 seconds;   //发放薪资的周期address owner;uint salary ;  //工资总额address employee ;  //frank的账户地址uint lastPayday; //构造函数名要和合约名字一样function pay(){owner = msg.sender;}function updateEmployee(address e,uint s){require(msg.sender == owner);//如果函数调用者不是当前owner,直接抛异常if(employee != 0x0){uint pament =salary * (now - lastPayday)/payDuration;employee.transfer(pament);}employee = e;salary = s * 1 ether;lastPayday = now;}function addFund() payable returns(uint){return this.balance;   //返回余额}function colculateRunway() returns(uint){return this.balance / salary;  //返回余额能够发放工资的次数}function hasEnoughFund() returns(bool){return this.colculateRunway() > 0;   //限制能够发放薪资的次数大于0次}function getPaid(){//如果合约调用者必须是employee 那么直接抛出异常require(msg.sender == employee);uint nextPayDay = lastPayday + payDuration; //如果重复使用一样的运算 第一是会浪费算力,还会浪费钱assert(nextPayDay < now);//没到支付薪水时间lastPayday = nextPayDay;employee.transfer(salary);}
}

数组:

- 静态数组(uint[5] A)  定义好了就不能改变数组的长度
- 动态数组(uint[] B)   方法:length  查看数组长度push   只能用于动态数组

11、数据存储机制

- storage
- memory
- calldata强制
--状态变量:storage
--function输入参数:calldata默认:
--function返回参数:memory
--本地变量:storage规则
相同存储空间变量父子
--传递reference(evm上的地址空间)
不同存储空间变量赋值
--拷贝

12、数据结构优化

Mapping- 类似与map(C++),dict(python)
- key(bool,int,address,string)
- value(任何类型)
- mapping(address=>Employee) employees
- 只能做成员变量,不能做本地局部变量Mapping底层实现- 不使用数组+链表,不需要扩容
- hash函数keccak256hash,在storage上储存,理论上无限大的hash表- 无法naiive的遍历整个mapping
- 赋值employees[key] = value- 取值 value = employees[key]
- value是引用,在storage上存储,可以直接修改- 当key不存在,value= type's default

13、可视度及合约继承

- public  公共的 谁都可见
- private  只有当前合约可见
- external   只有外部调用可见
- internal   外部调用不可见,内部和子类可见
- 状态变量:public,internal,private- 默认internal- public:自动定义取值函数

14、modifier

modifier onlyOwner{_;  如果_;放在前面  那么require(msg.sender == owner);就要放在下次调用的return之前require(msg.sender == owner);}

智能合约(一)————智能合约入门相关推荐

  1. EOS智能合约与DApp开发入门教程

    EOS的是Block.One主导研发的一个区块链底层公链系统,它专门为支撑商业去中心化应用(Decentralized Application)而设计,其代码开源. 比特币被称为区块链1.0,因为它开 ...

  2. EOS智能合约与DApp开发入门

    # EOS智能合约与DApp开发入门 EOS智能合约与DApp开发入门,并最终完成一个基于React和 EOS的便签DApp. ## 终端使用建议 - 1#终端用于nodeos运行 - 2#终端用于k ...

  3. 从智能合约到智能资产

    虽然智能合约仍然处于初始阶段,但是其潜力显而易见.想象一下,分配你的遗产就像滑动可调滑块就能 决定谁得到多少遗产一样简单.如果开发出足够简单的用户交互界面,它就能够解决许多法律难题,例如 更新遗嘱.一 ...

  4. BC之SC:区块链之智能合约——与传统合约的比较以及智能合约模型部署原理、运行原理相关配图

    BC之SC:区块链之智能合约--与传统合约的比较以及智能合约模型部署原理.运行原理相关配图 目录 SC与传统合约的比较 SC模型部署原理.运行原理 SC与传统合约的比较 1.传统合约VS智能合约  特 ...

  5. 智能合约怎么创建合约_可出售智能合约的协议

    智能合约怎么创建合约 by Pablo Ruiz 帕勃罗·鲁伊斯(Pablo Ruiz) 可出售智能合约的协议 (A Protocol for Sellable Smart Contracts) Et ...

  6. 区块链技术最佳的监管方式是智能合约监管智能合约

    区块链最新消息 1.在国内首部<区块链安全生存指南>发布 最新消息:比特大.长亭科技和ConsenSys陆联手发布了全国首部<区块链安全生存指南>.该指南围绕区块链技术安全,对 ...

  7. 蚂蚁区块链第10课 可信计算及TEE硬件隐私合约链智能合约开发实践

    1,摘要 本文介绍可信计算分类INTEL SGX技术和ARM TRUSTZONE技术技术方案概要,以及应用INTEL SGX技术的蚂蚁区块链TEE硬件隐私链的智能合约开发实践. 2,可信计算和2种技术 ...

  8. 编写和部署智能合约:智能合约工具、remix、Truffle

    第五章 文章目录 第五章 一.智能合约工具 二.remix 三.Truffle 总结 一.智能合约工具 智能合约的编译环境就是solidity的编译环境,智能合约的执行环境就是EVM. 二.remix ...

  9. 智能合约 与 外部账号之间转账,智能合约与智能合约之间转账

    从外部账户向智能合约账户转账以太币 外部账户给部署智能合约时给合约初始转账: 使用remix 测试环境 pragma solidity >=0.4.0 <0.7.0;contract Te ...

  10. Nick Szabo:智能合约与传统合约的区别及其用途

    Nick Szabo:密码学家,智能合约之父. 智能合约理念可追溯至1993年,为密码学家Nick Szabo所发明.自从以太坊引入智能合约之后,其在区块链领域被越来越多的人所熟知.本文正是Nick ...

最新文章

  1. stomp协议简介 服务器客户端通讯协议
  2. 【计算理论】计算复杂性 ( coNP 问题 | coNP 完全 | P、NP、coNP 相互关系 )
  3. 资源共享冲突问题概述
  4. 俄罗斯机器人雄鹿_在雄鹿无球可打,在火箭重获新生!哈登,你又让一人打出身价...
  5. 【游山玩水】三清山旅游行程
  6. 张量的通俗理解和计算
  7. Apache Karaf配置远程调试
  8. HIVE 一行转多行输出办法
  9. Linux(debian7)操作基础(十五)之systemd下lightdm免密登录
  10. 漫步数学分析十七——连续映射上的运算
  11. PyCharm 设置运行参数
  12. 我的毕业设计后端技术栈
  13. Java作业-圆柱体积
  14. Unity3D 使用UGUI实现公告牌
  15. 让你的nginx支持分布式追踪opentracing
  16. Linux环境非root用户配置SSH免密登录(配置原理)
  17. java获取首字母_【Java】获取中文首字母
  18. 获取保存在路由器中的ADSL账号和密码
  19. Java8中文api汉化文档下载【谷歌翻译最精准版】【jdk api 1.8_google.CHM】
  20. sql 删除唯一索引unique

热门文章

  1. 优化算法:人工蜂鸟算法AHA
  2. javascript中变量的内存分配,以及const VS let
  3. ntp如何确认与服务器偏差_NTP时钟同步原理及误差简析
  4. 云端软件平台与虚拟系统大比拼
  5. 每天一段java代码-------第16天(最大公约数最小公倍数)
  6. 查看Linux服务器公网内网IP地址
  7. 谈JS 异步任务,微任务,宏任务
  8. MD5 到底算不算一种加密算法?
  9. 字节跳动Lark-EA部门春招-实习/校招/社招-咨询群
  10. 【渝粤题库】广东开放大学 大学英语1 形成性考核