
区块链实践
基于以太坊的区块链编程、理论、技术知识等。以初学者的角度,以实例为驱动,学习、分析、推广区块链编程技术。
程序新视界
个人公众号【程序新视界】,一个硬技术,软实力同步提升的平台。《Spring Boo技术内幕:架构设计与实现原理》作者,《深入以太坊智能合约开发》联合作者之一。主要从事于三方支付行业。
展开
-
从零开始学习 JD Chain(四)-使用穿透式检索
注意: 要想使用穿透式检索,必须首先部署好JDChain并且安装启动高级检索应用。也就是首先要完成:“从零开始部署JDChain”和“从零开始安装穿透式检索”这两篇文章的内容。前置安装:Gateway版本: jdchain-gateway-1.1.2.RELEASEArgus版本: argus-0.8.4-RELEASEJdchain-starter版本: Tag=1.0.61. 操作步骤1.1. 通过sdk新建数据账户可根据JDChain的sdk样例自行构建,也可通过:原创 2020-10-08 15:28:02 · 1766 阅读 · 0 评论 -
Solidity如何通过代码减少gas消耗
我们知道,在以太坊上的交易gas是有上限的,因此也是比较昂贵的,特别是针对一些复杂业务的处理,随着业务数据的增长,有可能会导致gas超高,甚至业务无法进行操作。之前专门写过文章来描述如何减少gas的细节内容,这里再为大家讲解一种通过代码中memory来大幅度减少gas使用。首先先看下面示例代码:pragma solidity ^0.5.10;contract Test{ ...原创 2020-02-18 09:40:55 · 2391 阅读 · 0 评论 -
Solidity函数返回(returns)多个值及接收方式
在Solidity中一个函数方法是可以返回多个结果的。下面示例中完整的展示了,如何定义多返回值的函数,并且如何获取参数。pragma solidity ^0.5.10;contract ManyReturns{ // 基础方法:返回多个参数,用于被调用 function getThreeNum() public returns(uint one,uint two, uint...原创 2020-02-17 11:14:54 · 9038 阅读 · 1 评论 -
solidity中transfer异常"send" and "transfer" are only available for objects of type address
在solidity只能合约中,正常情况下我们可以使用transfer方法来进行转账操作,具体使用如下:msg.sender.transfer(_value);这样,就可以将指定的金额转到msg.sender的账户内。但是,还有一些情况时,ETH的接收者并不是msg.sender。那么该如何处理呢?使用下面这一种方式?function transfer(address _to, uint25...原创 2020-01-16 16:53:01 · 4865 阅读 · 1 评论 -
你对区块链的理解还停留在炒币上吗
「文末有福利」区块链已经发展多年,最近中国人民银行研发了电子货币DCEP(Digital Currency Electronic Payment),国家也要大力发展区块链技术。币圈一时火热,那么你对区块链的理解还停留在发币、炒币阶段吗?那真的落伍了。此区块链非彼区块链国家所说的区块链并非币圈所说的区块链。人民日报评论文章指出,区块链“未来已来”,但也要保持理性。区块链技术创新不等于炒作虚拟货...原创 2019-11-05 10:46:59 · 3314 阅读 · 0 评论 -
以太坊Linux下docker安装
环境要求Docker支持CentOS 7 (64-bit)和CentOS 6.5 (64-bit) 或更高的版本。Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。查看内核命令:uname -r...原创 2019-04-17 07:53:49 · 1324 阅读 · 0 评论 -
Remix无法连接私有链问题解决方案
Remix连接私有链当我们写完只能合约,准备发布到本地私有链时基本操作是这样的: - 先启动好geth节点或其他类型的钱包,提供JSON-RPC调用; - 点击Remix工具区的Run菜单; - 选择Web3 Provider; - 提示“Are you sure you want to connect to an ethrerum node?”,点击“OK”。 - 输入地址,一般本...原创 2018-08-30 18:33:46 · 5435 阅读 · 0 评论 -
Fomo3D 游戏的第一轮是如何结束的
本文作者:风静縠纹平(区块链布道者) 原文地址:https://www.jianshu.com/p/3e9dfc3200ca以太坊网络上备受瞩目的游戏Fomo3D(Fomo3D:Long)其第一轮在北京时间8月22日下午3点左右结束了。最终地址为0xa169…的玩家获得了 10469.66Eth的奖金,其取款交易被记录在了6191962区块中,该玩家在游戏中的总投入不到0.8Et...转载 2018-08-28 10:46:45 · 2200 阅读 · 0 评论 -
谈谈Solidity中的构造方法
在像Java这种面向对象的编程语言中,每个类都有一个或多个构造方法,Solidity也有这么一个构造方法。今天这篇文章带大家了解一下Solidity中的构造方法。Java中的构造方法在Java中,如果某个类未指定构造方法,在编译的过程中会采用默认的构造方法。public class DemoTest {}像上面这个类,未指定任何的构造方法,但同样可以创建Demo...原创 2018-07-24 13:10:23 · 7017 阅读 · 0 评论 -
Remix发生mock compiler source not found异常解决方案
首次使用Remix进行Solidity智能合约开发时会遇到mock compiler: source not found异常信息导致无法进行编译,本篇文章带大家解决此问题。问题现在当编写好智能合约之后,准备进行编译操作,会发现在右边出现如下图提示:mock compiler: source not found。 出现此异常的主要原因就是没有设置Remix所使用的Solid...原创 2018-07-20 08:38:46 · 3087 阅读 · 1 评论 -
Solidity: ParserError: Expected pragma, import directive or contract/interface/library definition.
在编写智能合约的时候,如果编译时出现类似以下的异常,请不要奇怪也不要灰心丧气,你很可能只是犯了一个很低级的错误。比如即使在照抄别人的代码的时候在某一行特别是,pragma声明那一行最后少写一个“;”,就会导致这样的异常。Solidity: ParserError: Expected pragma, import directive or contract/interface/library...原创 2018-07-19 20:15:46 · 7753 阅读 · 0 评论 -
聊聊Solidity中的constant修饰符
前言在《Solidity编译警告的解决之道》一文中聊到通过添加pure修饰来解决警告提示,这篇文章对此技术点进行进一步的拓展。为什么使用constant首先,我们要明白为什么用constant? Functions can be declared constant in which case they promise not to modify the state.也...原创 2018-07-18 12:00:57 · 6013 阅读 · 0 评论 -
Solidity编译警告的解决之道
网络上很多教程(图文或视频)在讲解Solidity语法实例的时候往往都将编译过程中的警告信息忽略。本篇文章用两个实例带大家清除这些警告信息。前言无论在学习Truffle框架的使用和Remix IDE的过程中网上的教程都会用到HelloWorld这个实例来带领大家入门。但如果对代码稍微有一些洁癖的程序员会发现,当自己跟着教程练习时在编译的过程中会出现一些警告信息。而这些警告信息,...原创 2018-07-17 14:57:41 · 3134 阅读 · 1 评论 -
以太坊暂未修复的一个bug-数组越界
前些天朋友遇到一个关于以太坊使用的leveldb导致的数组越界问题,一起讨论了很久。如果大家持续使用以太坊节点,迟早也会遇到此问题,在本篇文章中给大家分析一下,做好提前准备。异常信息我们先看一下具体的异常信息,对于普通的异常重启geth节点即可解决,但如果遇到下面这个异常信息,重启或升级版本都是无法解决的。INFO [04-28|10:03:35] Starting p...原创 2018-05-01 08:34:20 · 1614 阅读 · 2 评论 -
智能合约编写注意事项
今天区块链技术圈被美链(BEC)智能合约的漏洞导致代币价值几乎归零的事件刷遍朋友圈。这篇文章就带大家了解一些智能合约编写的注意事项。Overflow 与 UnderflowSolidity 可以处理 256 位数字, 最高为 2256 - 1, 所以对 (2 256 - 1) 加 1 会导致归 0。同理, 对 unsigned 类型 0 做减 1 运算会得到 (2**256 -...转载 2018-04-23 21:11:20 · 2432 阅读 · 0 评论 -
思维转换感悟与区块链视频资料分享
今天这篇文章闲谈一下自己的一些生活感悟,在文章最后为大家分享一套由谈国鹏老师提供的免费区块链相关知识视频。生活感悟15年的时候购买了一部苹果手机,使用起来一切都挺顺畅。最近一段时间在使用的过程中发现原装的查询耳机不好使了,动不动没有声音了,有时候又断断续续的。于是选择用蓝牙耳机替换。不仅耳机不好使,现在充电都是个麻烦事,充电口接触不良,换了好几个充电的线始终不好使,每次充电...原创 2018-04-16 21:38:43 · 1441 阅读 · 0 评论 -
谈我所经历的区块链历程
这两天感冒发烧,无法集中精力继续分享记录类文章,就聊聊本人所经历的区块链发展。纵观自己经历的区块链,倏忽之间,感觉过了好多年,理论和技术都在蓬勃。初闻区块链2015年底,工作间隙跟同事在公司外闲聊,同事为非技术人员,就聊起比特币如何挖,他自己在想办法挖比特币。当时一脸懵,什么是比特币,怎么挖?可能受限于阅历等,搁置没有再深入研究了。错失一个大好的时机。再闻区块链20...原创 2018-03-25 08:33:09 · 2851 阅读 · 0 评论 -
以太坊挖矿返回null源码分析
在以太坊版本1.7.3中,无论是dev环境或是公链环境在console中执行miner.start()始终返回null,而不是期待的true。这是为什么呢?这篇文章就带大家从源码中找找原因。在这个过程中我们会了解到更多底层的知识。挖矿入口程序首先看一下调用挖矿的程序,在console中我们执行的是:miner.start()##或miner.start(n)其中...原创 2018-03-20 23:14:51 · 2734 阅读 · 0 评论 -
以太坊同步模式源码解析
以太坊节点同步的时候支持三种模式:fast,light,full。而官方文档中已经明确–fast和–light参数选项已经被废弃。那么本篇博客就带大家看一下关于此参数的源代码,深入了解同步模式的底层转变。方法定义源代码解析首选从源代码中找到eth/downloader/modes.go。从文件的名字就可得知此文件是用来定义模式的,所谓modes就是指的同步模式。下面我们看一下此...原创 2018-03-19 09:15:14 · 6157 阅读 · 0 评论 -
以太坊客户端Geth命令用法-参数详解
geth是以太坊的官方节点版本,无论是mist钱包或其他的钱包内部都是集成了geth。今天就带大家熟悉一下geth的使用,命令行参数。主要根据官方文档进行翻译,注解。命令行选项名称geth - go-ethereum命令行接口Copyright 2013-2017 The go-ethereum Authors版本信息1.7.3-stable...原创 2018-03-18 11:32:30 · 11119 阅读 · 0 评论 -
以太坊数据同步常见问题集锦
以太坊数据同步是新手入门的必经阶段,在技术讨论群中(659809063)经常重复的被提问到。这篇博文就给大家整理一下常见的问题列表,以便大家学习。常见问题列表区块差几十块始终同步不完,怎么办?这是大家同步数据遇到的第一个难题。当大家兴致匆匆的启动程序,看着区块离最新的区块越来越近,难免兴奋起来。但当差十几块或几十块的时候,却是漫长的等待,于是忍不住要问,出什么问题了吗?...原创 2018-03-17 17:28:00 · 13845 阅读 · 0 评论 -
以太坊手续费不足异常(insufficient funds)
在以太坊发送交易的时候,如果手续费计算有误或者没有事先判断账户余额是否足够,便会碰到“insufficient funds for gas * price + value”异常。今天就带大家看看源代码分析一下此异常的始末。手续费不足异常手续费不足异常,顾名思义就是发起交易所需手续费超过了地址中的余额。我们知道,发起交易所需的手续费是由gasLimit和gasPrice组成,即它...原创 2018-03-13 10:28:26 · 43679 阅读 · 1 评论 -
科普|以太坊私钥存储文件
我们都知道,在区块链的世界中,私钥是你有用某一地址的唯一标识。丢失了私钥就等于丢失了此地址的所有权。以太坊私钥存储以太坊的私钥文件存储于数据目录(datadir指向或默认目录)下,对应的目录为keystore。所有的私钥文件都经过加密之后存储于此目录下。以太坊的客户端或图形界面帮助我们因此了底层复杂的密码实现,唯一需要我们做的就是保存好(多出备份)keystore下面的加密...原创 2018-02-21 13:14:37 · 11744 阅读 · 1 评论 -
以太坊执行miner.start返回null终极解决方案
在前面的一篇文章中我们讲解了以太坊执行miner.start返回null的解决方案,是搜罗了网上各种解决方案的汇总。但并不能有效的解决问题。此篇文章有针对性的对此问题进行解决。前文在看此篇文章之前也建议你先浏览一下之前的文章: 《以太坊执行miner.start返回null》之前的那篇文章也是搜集汇总了网上的各种解决方案,但在实践的过程中发现并不能有效的解决问题,只有发送交易才原创 2018-02-05 14:47:21 · 24017 阅读 · 0 评论 -
以太坊geth节点同步亲测经历
看到技术讨论群中好多朋友在以太坊节点数据同步的过程中遇到很多疑问,于是亲自购买一天服务器,进行节点同步测试,本文将分享整个测试过程中遇到的问题,及解决方案。服务器配置服务器配置比较简单,在阿里云上购买的2核4GLinux服务器,操作系统为centos 7.4,另外挂载了一个500G的高速云盘。如果大家条件允许,可将服务器配置进行升级,比如4核8G,8核16G等,如果配置过低会遇到原创 2018-02-03 15:28:36 · 35972 阅读 · 0 评论 -
以太坊实战-Filter
以太坊没有提供类似比特币根据地址查询历史交易的接口,因此在某些场景下(比如,币所用户充值)必须时刻监听着新生成的区块链里面是否包含平台用户的交易记录。针对此问题,以太坊有一个可以折中的JSON-RPC接口。eth_newFiltereth_newFilter接口可以创建一个filter对象,用来监听区块或交易发生的变化,也就所谓的日志(logs)。主题(topic)是订单依赖的,原创 2018-01-23 20:45:38 · 7341 阅读 · 0 评论 -
以太坊实战-attach命令
在前面的实战教程中我们经常提到attach这个命令,今天就针对此命令做更深一步的介绍。官方对此参数的解释如下: attach Start an interactive JavaScript environment (connect to node)也就是说它是一个连接到节点的JavaScript环境的交互窗口。通过它我们可以使用相应的命令与节点进行交互。与之对照的就原创 2018-01-21 11:27:09 · 7733 阅读 · 0 评论 -
智能合约中存在的3种最常见的误解
作为一名受欢迎的区块链平台的开发者,我们有时被问到类似以太坊的智能合约是否走多链路线。我总是回答说:没有,至少目前还没有。但智能合约在区块链充满炒作的世界里都可以风靡一时,为什么以前不行呢?那么问题是,尽管我们现在了解了关于比特币区块链的三大强势用例(出处,公司之间记录和轻量级的融资),但我们尚未找到以太坊智能合约的等价物。这并不是说人们缺乏想要利用智能合约的想法。相反,这些想法很多是根本转载 2018-01-15 09:28:25 · 23039 阅读 · 1 评论 -
以太坊实战-再谈nonce使用陷阱
在《以太坊实战之如何正确处理nonce》一文中我们介绍了nonce的基本概念和使用方法。也提到了它能够覆盖之前交易的特异功能。但是那只是nonce的冰山一角。今天再给大家分享在热点账户下nonce会出现的问题。热点账户所谓的热点账户就是频繁被使用的账户,在以太坊中比如交易所的统一出币账户,在短时间内频繁发起交易的账户,均可被称作热点账户。replacement transact原创 2018-01-14 08:33:21 · 18504 阅读 · 3 评论 -
以太坊中的账户、交易、Gas和区块Gas Limit等基本概念
本篇文章作为科普文章,汇总整理了以太坊中的账户、交易、Gas和区块Gas Limit等相关概念,以便大家在实践中更好的与具体业务相结合。什么是账户以太坊账户与我们所知的账户概念有一定相似之处,却又有很大的区别,更不同于比特币中UTXO。 账户分两类: - 外部拥有账户(EOA),也就是普通账户 - 合约账户普通账户所谓的普通账户就是我们存放以太币的账户,可以随意生原创 2018-01-12 12:07:01 · 31574 阅读 · 0 评论 -
以太坊JSON-RPC开源包分享
以太坊的JSON-RPC使用要比特币的复杂很多,特别是涉及到智能合约和代币相关的功能。比特币有现成的开源包可以拿来直接使用,以太坊也有同样的开源包。本篇文章仅分享Java版本的开源项目。开源项目官方网站:https://web3j.io/GitHub项目地址:https://github.com/web3j/web3j使用说明文档:https://docs.web3j.io/当然,文档部分在GitH原创 2017-12-30 09:20:20 · 4094 阅读 · 1 评论 -
solidity智能合约开发工具Atom及其插件安装
Atom简介Atom代码编辑器支持Windows、Mac、Linux三大桌面平台,完全免费,并且已经在 GitHub 上开放了全部的源代码。开发团队将Atom称为一个“为21世纪创造的可配置的编辑器”,它拥有非常精致细腻的界面,并且可配置项丰富,加上它提供了与 SublimeText上类似的 Package Control(包管理)功能,人们可以非常方便地安装和管理各种插件,并将 Atom原创 2017-12-11 08:25:42 · 6014 阅读 · 1 评论 -
Error: No network specified. Cannot determine current network异常
在使用truffle migrate进行智能合约test环境发布时如果未配置正确会出现以下异常:$ truffle migrateError: No network specified. Cannot determine current network. at Object.detect (/usr/local/lib/node_modules/truffle/build/cli.bund原创 2017-12-09 20:44:54 · 6610 阅读 · 2 评论 -
以太坊下载地址及相关文档
以太坊相关资料汇总最近不停的被问到关于以太坊一些资料的事情,比如官网文档,在何处下载,如何查看区块等问题,本篇文章将以太坊相关资料进行简单的汇总,方便大家查阅。官方下载地址官方地址:https://ethereum.github.io/go-ethereum/downloads/ 官方提供了Linux版本,Windows版本,Mac版本和源码编译的下载,甚至还有IOS和安卓版本的支持。 同时提供原创 2017-11-21 09:45:40 · 17547 阅读 · 0 评论 -
以太坊重放攻击
引言以太坊硬分叉后出现了大量的“重放攻击”,有交易所声称丢了币,用户丢币的事更多。那到底什么是重放攻击呢?计算机术语里的“重放攻击”以太坊硬分叉后发生的“重放攻击”和传统计算机术语不是一回事。传统术语“重放攻击”:指的是身份欺诈。在维基百科上定义很清晰,如下, 假设Alice向Bob认证自己。Bob要求她提供密码作为身份信息。同时,Eve窃听两人的通讯,并记录密码。在Alice和Bob完成通讯后转载 2017-11-16 08:01:04 · 5120 阅读 · 2 评论 -
以太坊Geth几种同步模式
同步模式分类–fast Enable fast syncing through state downloads–light Enable light client mode–syncmode full在Geth1.6版本,–fast参数已经改为–syncmode=fast,当然–fast依旧有效。full模式也一样如此。Full同步步骤:获取区块的header获取区块的body从创始块开始校验没一个原创 2017-10-27 08:17:25 · 24230 阅读 · 0 评论 -
区块链Block创建时间
区块时间获取无论BTC系列的区块还是ETH系列的区块,区块创建的时间存储单位都是unix时间戳。单位是秒而不是毫秒,这是我们在使用时必须注意的,如果直接用它来创建时间是肯定是错误的。Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总原创 2017-10-12 23:01:39 · 5732 阅读 · 3 评论 -
以太坊加速区块同步方法
以太坊加速区块同步方法无论是使用图形界面或geth客户端进行节点数据同步时都会是一个漫长的过程。中间还会因为链接其他节点失败导致迟迟无法同步数据,一直打印错误日志。 主要原因是国内节点数过少,外加国内网络的特殊限制。EthFans发起的星火节点计划,组织国内对以太坊项目感兴趣的组织和个人自愿运行超级节点,星火节点的信息将被打包到node(节点)文件中,让社区成员自由下载,连接到更多超级节点,加快同原创 2017-09-27 08:06:45 · 14541 阅读 · 3 评论 -
以太坊实战之《如何正确处理nonce》
问题概述以太坊系列(ETH&ETC)在发送交易有三个对应的RPC接口,分别是eth_sendTransaction、eth_sendRawTransaction和personal_sendTransaction。这三个接口发送(或构造发送内容时)都需要一个参数nonce。官方文档对此参数的解释是:整数类型,允许使用相同随机数覆盖自己发送的处于pending状态的交易。官网解释仅从官网的解释,我们无法原创 2017-09-25 07:55:42 · 15639 阅读 · 1 评论 -
以太坊实践经验之《eth.blockNumber结果为0》
问题场景在使用以太坊ETH的过程中遇到这样一个问题,就是通过rpc 控制台调用eth.blockNumber获得的返回结果为0。如果没有产生区块或没有同步到区块,查询结果为0并不奇怪,本身区块高度就是0。然而,在实践中发现,区块已经同步一部分之后,在某个时刻调用此节点返回的结果依旧是0。那么,这个问题的原因是什么呢?软件环境1.7版本的geth客户端, Linux操作系统 链接公有链原因分析在Get原创 2017-09-24 11:03:23 · 14528 阅读 · 3 评论