solidity payable_以太坊区块链搭建与使用(五)-智能合约Solidity
一、智能合约Solidity开发工具
1、remix-ide http://remix.ethereum.org/ 在线版本,也可以去github下载安装到本地。开发、编译、发布、执行、测试
2、remix-ide-cn http://remix.hubwiz.com/ 在线中文版本,也可以去github下载安装到本地。支持开发、编译、发布、执行、测试 。这个有个好用的地方就是部署的合约可以直接在这里调用执行。
p.s. 一般打开链接是空白可以试试Ctrl+F5强刷几次试试。
3、Ethereum Studio 目前官网推出Ethereum Studio。 https://studio.ethereum.org/ 在线版本,还是比较好用,不过目前没看到可下载本地。
4、IntelliJIDEA Java开发者可以试试IDEA的插件,不过开发与编译好像要安装2插件才行。
二、智能合约Solidity入门
Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。Solidity与其它语言相关的特点?
它的语法接近于Javascript,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约,它又有很多的不同,下面列举一些:
- 以太坊底层是基于帐户,而非UTXO的,所以有一个特殊的
Address
的类型。用于定位用户,定位合约,定位合约的代码(合约本身也是一个帐户)。 - 由于语言内嵌框架是支持支付的,所以提供了一些关键字,如
payable
,可以在语言层面直接支持支付,而且超级简单。 - 存储是使用网络上的区块链,数据的每一个状态都可以永久存储,所以需要确定变量使用内存,还是区块链。
- 运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用的方式。因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行,分布式的感觉。
- 最后一个非常大的不同则是它的异常机制,一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。
Hello Wolrd!
听起来高大上,其实入手玩起来也可以很简单:pragma solidity ^0.4.0; contract HelloWorld{ uint balance; function update(uint amount) returns (address, uint){ balance += amount; return (msg.sender, balance); } }
通过读取参数输入的新值,并将之累加至合约的变量中,返回发送人的地址,和最终的累计值。Solidity的完整语法:入门说明:
- Solidity智能合约文件结构
- 智能合约源文件的基本要素概览(Structure of a Contract)
值类型:
- 类型
- 布尔(Booleans)
- 整型(Integer)
- 地址(Address)
- 字节数组(byte arrays)
- 小数
- 字符串(String literal)
- 十六进制字面量
- 枚举
- 函数(Function Types)
引用类型:
- 引用类型(Reference Types)
- 数据位置(Data location)
- 数组(Arrays)
- 数据结构(struct)
杂项:
- 映射/字典(mappings)
- 左值运算符(Operators Involving LValues)
- 类型间的转换(Conversions between Elementary Types)
- 类型推断(Type Deduction)
单位:
- 货币单位(Ether Units)
- 时间单位(Time Units)
语言内置特性:
- 特殊变量及函数(Special Variables and Functions)
- 数学和加密函数(Mathematical and Cryptographic Functions)
- 地址相关(Address Related)
进阶:
- 入参和出参(Input Parameters and Output Parameters)
- 控制结构
- 函数调用(Function Calls)
- 创建合约实例(Creating Contracts via new)
- 表达式的执行顺序(Order of Evaluation of Expressions)
- 赋值(Assignment)
- 作用范围和声明(Scoping And Decarations)
- 异常(Excepions)
- 内联汇编(Inline Assembly)
合约详解:
- 合约
- 可见性或权限控制(Visibility And Accessors)
- 访问函数(Accessor Functions)
- 函数修改器(Function Modifiers)
- 常状态变量(constant state variables)
- 回退函数(fallback function)
- 事件(Events)
- 继承(Inheritance)
- 接口(Abstract Contracts)
其它:
- 库(Libraries)
- 状态变量的存储模型(Layout of State Variables in Storage)
- 内存变量的存局(Layout in Memory)
- 调用数据的布局(Layout of CallData)
此文引用网络资源 https://www.tryblockchain.org/
hanko:以太坊区块链搭建与使用(一)-私有链zhuanlan.zhihu.com
hanko:以太坊区块链搭建与使用(二)-私有链配置与启动zhuanlan.zhihu.com
hanko:以太坊区块链搭建与使用(三)-联盟链zhuanlan.zhihu.com
hanko:以太坊区块链搭建与使用(四)-以太坊钱包工具zhuanlan.zhihu.com
hanko:以太坊区块链搭建与使用(五)-智能合约Solidityzhuanlan.zhihu.com
hanko:以太坊区块链搭建与使用(六)-基于Java调用以太坊zhuanlan.zhihu.com
solidity payable_以太坊区块链搭建与使用(五)-智能合约Solidity相关推荐
- 以太坊区块链_以太坊区块链搭建与使用(一)-私有链
步骤 一.下载go语言,并配置环境变量 //以太坊源代码依赖的编译与运行环境 二.通过git clone以太坊源码(go-ethereum),并编译 一.go安装 step1:下载 官方(一般打不开) ...
- 如何搭建socks5和ss节点_以太坊区块链搭建与使用(三)-联盟链
首先对以下概念说明下: 一.以太坊大家都知道比特币使用的技术是区块链技术,比特币也是区块链技术的代表. 即比特币=区块链1.0随着区块链技术的发展以太坊也诞生了,也就是我们说的 区块链2.0.为什么说 ...
- 区块链开发(五)搭建以太坊区块链浏览器
经过前面文章介绍,已经搭建以太坊的区块链环境,但是没有一个界面能查看到区块链的块数等信息,不是很直观,本篇搭建以太坊区块链浏览器. 下载区块链浏览器代码 uiran@cuiran:~/ethereum ...
- 以太坊区块链浏览器的搭建
以太坊区块链浏览器的搭建 环境;Ubuntu 首先需要下载git 参考链接:http://www.360bchain.com/article/156.html apt install git 1.下载 ...
- 【区块链】以太坊区块链技术初探
2019独角兽企业重金招聘Python工程师标准>>> [国内首家]以太坊区块链实战教学:http://edu.csdn.net/course/detail/6455 LinApex ...
- 以太坊 私有链搭建 Geth+Mist钱包
近期在区块链的热潮推动下,我开始研究区块链技术,尤其是智能合约.可编程式的智能合约龙头老大非以太坊莫属了,其他的合约平台如 hyperledger,EOS 相对来说没以太坊成熟,以后陆续在研究.好了, ...
- 尚硅谷以太坊区块链学习之NFT智能合约(6)
尚硅谷以太坊区块链学习之NFT智能合约(6) 前言 一.NFT智能合约 1.智能合约代码 2.智能合约推送 3.具体调用 二.具体使用 三.NFT商家智能合约 前言 提示:服务外包区块链学习 5被ba ...
- 以太坊区块链实现去中心化购物功能
在当今的中国,网上购物已经成为了我们不可或缺的一部分,通过电商网站查看商品,下单购物,支付,付款到支付宝,买家收货确认后,货款自动打入卖家的账户,这些购物的体验多数人每天都可能发生.大家都知道,淘宝的 ...
- 基于以太坊区块链的物联网/IoT设备管理【论文及源码】
本文介绍一个利用以太坊区块链管理物联网IoT设备的身份识别. 验证和声誉的IoT设备管理系统.该系统使用Web界面在以太坊智能合约 中注册物联网设备,并通过密码学签名消息验证Iot设备对平台的 使用权 ...
最新文章
- 开源项目OpenGene发起人:用“互联网+基因技术”改变肿瘤的诊断与治疗
- Win2008虚拟化实战之Hyper-V快速设置
- python类的动态方法是什么_如何在python中为类动态创建类方法
- django表与表之间的关系
- 自定义注解--Annotation
- 一个资深系统管理员的O2O实践(三)
- 服务器挂游戏用什么系统,挂游戏用什么云服务器
- 【数据结构笔记14】微软面试经典 - 逆转链表问题(Reversing Linked List)
- homestead安装swoole扩展
- spark MetaException(message:Version information not found in metastore. )
- 通过js获取本机的IP地址
- 慧荣SM2258XT-主板CE跳线Toggle土狗跳线合集整理(持续更新)
- 对普通文件 霍夫曼编解码 matlab,JPEG编解码过程详解(二)
- Python 与 Matlab 矩阵操作对应表
- 福利,架构师之路定制T恤
- 写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。
- Java调用SMS短信通API实现发短信功能
- 在午睡,手机接连振动,是几个朋友用短信微信问我
- word计算机一级知识点,计算机一级word操作基础知识点.doc
- 计算机word模块试题,计算机word考试试题1(附答案)
热门文章
- ImageSharp一个专注于NetCore平台图像处理的开源项目
- 理解C# 4 dynamic(4) – 让人惊艳的Clay
- 为什么转换到Visual Studio 2017如此 “容易”
- 关于全局ID,雪花(snowflake)算法的说明
- PHP 使用 OSS 批量删除图片
- 投巧解决JavaScript split方法出现空字符的问题
- jQuery 3.4.0 Released(2019.4.10)
- Android之运行app提示The application could not be installed: INSTALL_FAILED_TEST_ONLY
- IOS学习笔记七之KVC和Key路径
- linux之用2张图片描述vim常见命令