Solidity支持条件语句,让程序可以根据条件执行不同的操作.条件语句包括: if if...else if...else if 语法 if (条件表达式) { 被执行语句(如果条件为真) } 示例 展示if语句用法. pragma solidity ^0.5.0; contract SolidityTest { uint storedData; constructor() public { storedData = 10; } function getResult() public view…
与其他语言类似,Solidity语言支持循环结构,Solidity提供以下循环语句. while do ... while for 循环控制语句:break.continue. Solidity – while循环 语法 Solidity 中, while循环的语法如下: while (表达式) { 被执行语句(如果表示为真) } 示例 pragma solidity ^0.5.0; contract SolidityTest { uint storedData; constructor() p…
Solidity – 算术运算符 Solidity 支持的算术运算符,如下表所示: 假设变量A的值为10,变量B的值为20. 序号 运算符与描述 1 + (加)求和例: A + B = 30 2 – (减)相减例: A – B = -10 3 * (乘)相乘例: A * B = 200 4 / (除)相除例: B / A = 2 5 % (取模)取模运算例: B % A = 0 6 ++ (递增)递增例: A++ = 11 7 — (递减)递减例: A– = 9 示例 下面的代码展示了如何使用算…
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八)监控系统 (九)会员中心 (十) APP版本控制系统 (十一)Winner前端框架与RPC接口规范讲解 (十二)上层应用案例 (十三)总结 虚拟币交易平台(区块链)下 [C#与以太坊通讯] 这一篇,也是区块链代币交易平台的最后一篇博客.所以内容都是基于前面两篇博客的,没有看过前面两篇的建议先过一遍. 12.2…
以太坊(Ethereum)与其他公共区块链一样,使用工作量证明机制确保区块链网络正常运行. 矿工进行工作量证明计算,即挖矿,来选择区块,写入区块链,确认交易. 交易过程如下图所示: 从技术角度来看,以太坊使用的工作量证明算法称为Ethash,这是一种哈希算法,灵感来自Dagger-Hashimoto算法.…
智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethereum) – 智能合约开发概述 支持智能合约的区块链 虽然以太坊(Ethereum)是最流行支持智能合约的区块链平台,但它并不是唯一支持智能合约的平台. 超级账本(Hyperledger) 是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目.通过创建分布式账本的公开标准,实…
用途: 全节点:用于区块和交易的校验 轻节点:电子钱包 以太坊(Ethereum)网络是一个公共的区块链网络,网络中包含2种网络节点: 全节点 轻节点 全节点 包含了从初始区块开始的全部区块,这些区块中包含了所有的交易历史记录,这些信息是区块链完整性的证据,可用于区块和交易的校验.通常矿工节点应该是全节点. 轻节点 只包含区块头形成的链,为节省空间,去除了区块体.这些类型的节点主要用于电子钱包,电子钱包必须是轻量级的,因此不能存储整个区块链.轻节点不会用来校验区块或交易,但区块链是一个网络,如有…
作用: 外部账号 – 用户使用的账号,账户余额. 合约账号 – 智能合约使用的账号,每个智能合约都有一个账号,内存和账户余额 以太坊(Ethereum)网络中,有2种账号: 外部账号 – 用户使用的账号 合约账号 – 智能合约使用的账号,每个智能合约都有一个账号 这些账号,都被称为状态对象/state object,构成了以太坊网络的状态.外部账号的状态是账户余额,合约账号的状态是内存与账户余额. 外部账号是用户账号,例如,普通用户.矿工等使用的账号. 合约账号是区块链网络中,位于特定地址(账号…
作用:执行智能合约代码的引擎 以太坊(Ethereum)虚拟机是执行智能合约代码的引擎. 可以用某种语言,例如Solidity语言,开发智能合约程序,编译成以太坊(Ethereum)虚拟机支持的字节码/bytecode,然后该程序就可以在虚拟机中执行了. 以太坊(Ethereum)虚拟机可以被看做是一个大型的分布式计算机. 以太坊(Ethereum)以虚拟机为核心,支持开发各种应用程序,来充分挖掘区块链技术的应用场景和潜力. 以太坊(Ethereum)网络中运行的应用,被称为分布式应用 – DA…
以太币的作用:防范以太坊网络被滥用和激励矿工. 与比特币网络有比特币类似,以太坊(Ethereum)也有自己的虚拟币 — 以太币. 以太币的主要作用有2个: 应用程序执行任何操作都需要支付以太币,防范以太坊网络被滥用. 与比特币类似,用于激励矿工. 每次执行智能合约时,都需要消耗“汽油/gas”,即支付以太币. 以太坊(Ethereum)中的汽油/gas 以太坊(Ethereum)区块链网络上,每一次操作的执行都需要消耗“汽油/gas”,用户需要支付“油费”,“油费”用以太币计算,价格由矿工决定…
以太坊的作用:构建基于区块链的分布式应用. 以太坊是什么:可编程的虚拟币. 以太坊(Ethereum)是一个可编程的虚拟币,它是一个基于公共区块链的分布式计算平台,可用于构建基于区块链的分布式应用. 在以太坊(Ethereum)出现之前,各种区块链应用的功能非常有限,例如,比特币和其他加密货币都只是纯粹的数字货币. 以太坊(Ethereum)创始人Vitalik Buterin将以太坊(Ethereum)设想为开发人员在区块链上编写程序的平台.为了实现此目标,Vitalik Buterin基于区…
以太坊(Ethereum)网络中,定义了一组通用协议用于支持智能合约的运行,其核心便是以太坊(Ethereum)虚拟机. 下图解释了该架构: 开发人员使用Solidity等开发语言开发智能合约 源程序被编译成以太坊虚拟机支持的字节码可执行程序 可执行程序被部署到网络中,即写入区块,并被分配一个账号(地址) 外部账号或其他合约账号,可以通过该智能合约的账号访问它 需要注意的是,以太坊(Ethereum)虚拟机不仅是完全沙箱化的,而且是完全隔离的.这意味着当前在EVM上运行的代码不能访问网络或文件系…
Solidity语言是一种面向合约的高级编程语言,用于在以太坊区块链网络上实现智能合约.Solidity语言深受c++.Python和JavaScript的影响,针对以太坊(Ethereum)虚拟机(EVM)设计. Solidity语言是静态类型语言,支持继承.库和复杂的用户定义类型. 可以使用Solidity语言创建区块链上运行的投票.众筹.钱包等各种类型的智能合约. 以太坊/Ethereum是什么? 以太坊是一个去中心化的,运行智能合约的区块链平台. 以太坊/Ethereum虚拟机(EVM)…
作用:用户交互 分布式应用(DApp)是运行在区块链之上的应用程序,支持区块链网络中用户之间的交互. DApp(decentralized application)的后端代码运行在区块链网络上,这个可以与普通互联网应用比较一下,普通互联网应用的后端代码运行在集中式的服务器上. DApp可以使用任何语言编写前端代码和用户界面(就像普通应用程序一样),前端调用后端实现实现功能. 如果一个互联网普通app可以表示为: App = 前端 + 后端服务器App=前端+后端服务器 则一个DApp可以表示为:…
以太币的主要单位是以太/Ether,即一个以太币,以太币的最小单位是wei. 以太币最小单位 wei 是以虚拟币先驱人物:戴伟 Wei Dai 命名,戴伟 W Dai 是一位兴趣广泛的密码学专家,他在 1998 年发明了 B-money 匿名的.分布式的电子加密货币系统,强调点对点的交易和不可更改的交易记录.中本聪发明比特币的时候,借鉴了很多戴伟的设计,并和戴伟有很多邮件交流. 以太币的单位如下: 单位 Wei 值 Wei wei 1 wei 1 Kwei 1e3 wei 1,000 Mwei…
作用:提供优于传统合约的安全方法,并减少与合约相关的其他交易成本. 以太坊网络基石:以太坊虚拟币和智能合约. 智能合约(Smart contract )是一种旨在以信息化方式传播.验证或执行合同的计算机协议.智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转.智能合约概念于1995年由Nick Szabo首次提出. 智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本. 简单地说,智能合约可以理解为一个自执行的协议.智能合约可以自动处理协议的履行.管理.…
一个 Solidity 源文件可以包含任意数量的合约定义.import指令和pragma指令. 让我们从一个简单的 Solidity 源程序开始.下面是一个 Solidity 源文件的例子: pragma solidity >=0.4.0 <0.6.0; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view retu…
Solidity 支持三种类型的变量: 状态变量 – 变量值永久保存在合约存储空间中的变量. 局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效. 全局变量 – 保存在全局命名空间,用于获取区块链相关信息的特殊变量. Solidity 是一种静态类型语言,这意味着需要在声明期间指定变量类型.每个变量声明时,都有一个基于其类型的默认值.没有undefined或null的概念. 状态变量 变量值永久保存在合约存储空间中的变量. pragma solidity ^0.5.0; co…
目的:解决由于区块链过长,导致节点硬盘存不下的问题. 方法:只需保留交易的哈希值. 区块链作为分布式账本,原则上网络中的每个节点都应包含整个区块链中全部区块,随着区块链越来越长,节点的硬盘有可能放不下.区块链中引入了默克尔树解决这个问题. 区块链中,为节省空间,只保存交易的哈希值,不保存交易本身的信息,哈希值对于校验来说足够了. 默克尔树很简单,具体来说,一个区块中的所有交易都会求取哈希值,得到的哈希值,再两两组合成新文本求取哈希值,以此类推,直到生成最后一个哈希值,即根哈希值,这些哈希值组成的…
在用任何语言编写程序时,都需要使用变量来存储各种信息.变量是内存空间的名称,变量有不同类型,例如整型.字符串类型等等.操作系统根据变量的数据类型分配内存. Solidity中,变量类型有以下几大类: 值类型 地址类型 引用类型 值类型 类型 保留字 取值 布尔型 bool true/false 整型 int/uint 有符号整数/无符号整数. 整型 int8 to int256 8位到256位的带符号整型数.int256与int相同. 整型 uint8 to uint256 8位到256位的无符…
texas-web3j-solidity项目是一个java版本的,使用web3j包和eth网络交互的小程序. 主要实现了以下功能: 1.发布合约 2.发起转账 3.查询交易 4.调用智能合约方法 texas-web3j-solidity项目在官方例子基础上做了以下几点功能性修改: 1.增加texas合约,用于游戏充值提现等功能 2.以太坊测试网络切换为ropsten,该测试网络更容易获取测试eth,地址为:https://www.ropsten.io/#faucet 3.增加spring-boo…
局部变量的作用域仅限于定义它们的函数,但是状态变量可以有三种作用域类型. Public – 公共状态变量可以在内部访问,也可以通过消息访问.对于公共状态变量,将生成一个自动getter函数. Internal – 内部状态变量只能从当前合约或其派生合约内访问. Private – 私有状态变量只能从当前合约内部访问,派生合约内不能访问. 示例 pragma solidity ^0.5.0; contract C { uint public data = 30; uint internal iDa…
Solidity 支持c风格和c++风格的注释. //之后到行尾的文本,都被看作注释,编译器忽略此内容 /* 与 */ 之间的文本被看作注释, 编译器忽略此内容 示例 注释示例. function getResult() public view returns(uint){ // 这是一行注释,类似于c++中的注释 /* * 这是多行注释 * 类似于c语言中的注释 */ uint a = 1; uint b = 2; uint result = a + b; return result; }…
为简单起见,我们使用在线Solidity开发工具Remix IDE编译和运行Solidity程序. 第1步 – 在File explorers选项卡下,新建一个test1.sol文件,代码如下: 示例 pragma solidity ^0.5.0; contract SolidityTest { constructor() public{ } function getResult() public view returns(uint){ uint a = 1; uint b = 2; uint…
在线开发环境Remix(推荐) 学习Solidity推荐使用在线开发环境Remix,本教程的例子将使用Remix开发运行. 安装本地编译器 安装 nodejs / npm node官方网站下载node,推荐LTS版本,按提示完成安装,npm会同时装上. 验证Node版本: Kevin@QIKEGU G:\ > node -v v10.16.3 Kevin@QIKEGU G:\ > npm -v 6.11.3 安装 Solidity 编译器 solc 一旦安装了Node.js包管理器,就可以按照…
密码学中,最重要的函数之一是哈希函数.哈希函数将任意大小的数据(内容)映射到固定大小的数据(哈希值). 哈希函数是单向的,从内容生成哈希值很容易,但从哈希值映射到内容很难. 比特币使用SHA-256哈希函数,该函数生成一个大小为256位(32字节)的哈希值(输出).如图所示 Bob在向Alice下订单时,创建了一条类似于上面所示的消息.把这个消息通过哈希函数生成32字节的哈希值. 哈希值的特点是,哈希值对于对于消息内容是唯一的,消息内容有任何改动,哪怕是多了个字符,生成的哈希值也是不一样的. 所…
区块链入门级别认知(blockchain) 前言:今天参加了迅雷关于区块链的大会,学习和感受总结一下 之前的认知在:几个混迹互联网圈关于区块链 耳熟能详的 热词 “比特币” “区块链” “挖矿” ,知道的是有人从比特币或者相关虚拟货币中暴富.然后相关资源媒体不断炒概念,蹭热度公司出现了区块链项目,甚至还有区块链牙刷“边刷牙边挖矿,获得爱牙币还能兑换成牙刷,牙线等产品或者服务”... 通过今天在大会上的学习,首先拎清了几个事实: (1)没错,会有人从区块链上的虚拟货币有贫穷限制想象的获利.或者“炒…
什么是以太坊(Ethereum) 以太坊(Ethereum)是一个基于区块链技术,允许任何人构建和使用去中心化应用的区块链平台.像比特币一样,以太坊是开源的,并由来自全世界的支持者们共同维护.与比特币仅提供了有限功能的脚本不同,以太坊提供了一个“图灵完备”的虚拟机,称为以太坊虚拟机(Ethereum Virtual Machine),简称EVM,用户可以在EVM上创建智能合约(Smart Contract).以太坊平台中的通用货币为以太币(Ether),简称ETH,以太币可用于账号间的转账交易或…
最近,一位小伙伴向我咨询问题,说他发现了一个诡异的现象.以太坊的区块链中居然有全是0的地址:0x0000000000000000000000000000000000000000 这究竟是怎么回事儿呢? 查看区块链后,发现还是蛮有趣的,且听我慢慢道来. 神秘而富有的地址 用在线的区块链浏览器查看下这个地址,我勒个去,居然有7228个ETH,价值500多w刀呢. 这究竟是何方土豪?这些ETH又从何而来呢? 创世区块 之前的文章<以太坊(Ethereum)创世揭秘>中曾经提到过,ETH最主要的来源并…
在做一些测试工作的时候, 为了方便控制以及更快的进入真正的测试工作,可能需要搭建一个私有的以太坊网络. 而以太坊节点之间能够互相链接需要满足1)相同的协议版本2)相同的networkid,所以搭建私有网络最方便的方法就是通过geth命令中的--networkid选项,设置一个与主网不同的networkid(主网的networkid为1),这也是官方推荐的方法. 下面开始建立私有以太坊网络: mkdir private-geth cd private-geth 建立创世纪区块文件,是一个json格…