自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 Java工具集-Excel指定文件名称读取工具类

添加依赖 <!--poi--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</v...

2020-04-30 10:04:43 618 1

原创 快速学习-Lombok1.16.X版本与1.18.X依赖冲突解决方案

依赖冲突原因lombok1.16.X与1.18.X存在@Data注解自动编译生成的hashCode方法与equals方法存在符号无法识别问题。当本身项目引入的Lombok版本与第三方Jar包引入的Lombok版本不一致时会在编译时期产生找不到defaultdefaultdefault的错误解决方案升级所在项目1.16.X为1.18.X修改引入的第三方jar包项目修改1.18.X为1....

2020-04-30 09:52:17 2632

原创 Java工具集-Csv文件读取工具类

添加依赖 <!--开源的opencsv--> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version&...

2020-04-30 09:36:27 2235

原创 Java工具集-JSch连接远程服务器工具类

代码示例import com.jcraft.jsch.JSch;import com.jcraft.jsch.Session;/** * @program: simple_tools * @description: 连接远程ES通道 * @author: Mr.chen * @create: 2020-04-27 13:52 **/public class JschUtil {...

2020-04-29 09:45:14 804

原创 速读原著-Java核心技术(安装Java开发工具包)

第 2 章 Java 程序设计环境本章主要介绍如何安装 Java 开发工具包( JDK ) 以及如何编译和运行不同类型的程序:控制台程序、 图形化应用程序以及 applet。运行 JDK 工具的方法是在终端窗口中键人命令。然而, 很多程序员更喜欢使用集成开发环境。 为此,将在稍后介绍如何使用免费的开发环境编译和运行 Java 程序。尽管学起来很容易, 但集成开发环境需要吞噬大量资源, 编写小型程...

2020-04-17 14:55:19 574

原创 速读原著-Java核心技术(关于Java的常见误解)

1.5 关 于 Java 的常见误解在结束本章之前, 我们列出了一些关于 Java 的常见误解, 同时给出了解释。Java 是 HTML 的扩展Java 是一种程序设计语言;HTML 是一种描述网页结构的方式。除了用于在网页上放置Java applet 的 HTML 扩展之外,两者没有任何共同之处。使用 XML, 所以不需要 Java Java 是一种程序设计语言;XML 是一种描述数据的...

2020-04-17 10:46:20 423

原创 速读原著-Java核心技术(Java 发展简史)

1.4 Java 发展简史本节将介绍 Java 的发展简史。这些内容来自很多出版资料(最重要的是 SunWorld 的在线杂志 1995 年 7月刊上对 Java 创建者的专访。)Java 的历史要追溯到 1991 年,由 Patrick Naughton 和 James Gosling (一个全能的计算机奇才)带领的 Sun 公司的工程师小组想要设计一种小型的计算机语言, 主要用于像有线电视...

2020-04-17 10:40:25 469 1

原创 速读原著-Java核心技术(Java applet 与 Internet)

1.3 Java applet 与 Internet这里的想法很简单: 用户从 Internet 下载 Java 字节码, 并在自己的机器上运行。在网页中运行的 Java 程序称为 applet。要使用 applet, 需要启用 Java 的 Web 浏览器执行字节码。不需要安装任何软件。任何时候只要访问包含 applet 的网页都会得到程序的最新版本。最重要的是,要感谢虚拟机的安全性,它让我们...

2020-04-17 10:33:34 468

原创 速读原著-Java核心技术(一)

第 1 章 Java 程序设计概述1996 年 Java 第一次发布就引起了人们的极大兴趣。关注 Java 的人士不仅限于计算机出版界,还有诸如《纽约时报》《华盛顿邮报》《商业周刊》这样的主流媒体。Java 是第一种也是唯一一种在 National Public Radio 上占用了 10 分钟时间来进行介绍的程序设计语言,并且还得到了 $100 000 000 的风险投资基金。这些基金全部用来...

2020-04-17 09:15:05 654

原创 快速学习-React 生命周期简介

React 生命周期简介React 生命周期(v16之前)生命周期四阶段主要函数组件初始化(initialization)construtor() 可以给 this.state 赋初值挂载(Mounting)阶段componentWillMount():在组件挂载到DOM前调用,且只会被调用一次render():根据组件的 props 和 state 返回一个React元素...

2020-04-15 21:47:47 323

原创 快速学习-Mongo DB简介

Mongo DB简介Mongo DB 是什么由C++编写,是一个基于分布式文件存储的开源数据库系统旨在为WEB应用提供可扩展的高性能数据存储解决方案在高负载的情况下,可以添加更多的节点来保证服务器性能\MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组Mongo...

2020-04-15 20:57:44 1084

原创 快速学习-以太坊基于 token 的投票

基于 token 的投票——用 truffle 构建简单投票 DApp在课程 “简单投票 Dapp” 中,你已经在一个模拟的区块链(ganache)上实现了一个投票合约,并且成功地通过 nodejs 控制台和网页与合约进行了交互。在接下来的项目学习中,我们将会实现以下内容:安装叫做 truffle 的以太坊 dapp 框架,它会被用于编译和部署我们的合约。在我们之前简单投票 DApp 上...

2020-04-15 16:30:37 576

原创 快速学习-以太坊中树结构

以太坊中树结构以太坊中所有的 merkel 树都是 MPT在一个区块的头部(block head)中,有三颗 MPT 的树根:• stateRoot• 状态树的树根• transactionRoot• 交易树的树根• receiptsRoot• 收据树的树根状态树(state trie)• 世界状态树,随时更新;它存储的键值对 (path, value) 可以表示为...

2020-04-15 16:19:12 581

原创 快速学习-帕特里夏树

帕特里夏树(Patricia Tree)如果一个基数树的“基数”(radix)为2或2的整数次幂,就被称为“帕特里夏树”,有时也直接认为帕特里夏树就是基数树以太坊中采用 Hex 字符作为 key 的字符集,也就是基数为16 的帕特里夏树以太坊中的树结构,每个节点可以有最多 16 个子节点,再加上 value,所以共有 17 个“插槽”(slot)位置以太坊中的帕特里夏树加入了一些额外的数...

2020-04-15 16:18:14 1314

原创 快速学习-梅克尔-帕特里夏树

梅克尔-帕特里夏树 Merkel-Patricia Tree(MPT)MPT是什么Merkel Patricia Tree (MPT),翻译为梅克尔-帕特里夏树MPT 提供了一个基于密码学验证的底层数据结构,用来存储键值对(key-value)关系MPT 是完全确定性的,这是指在一颗 MPT 上一组键值对是唯一确定的,相同内容的键可以保证找到同样的值,并且有同样的根哈希(root has...

2020-04-15 16:17:14 709

原创 快速学习-mocha 简介与入门

mocha 简介mocha 是 JavaScript 的一个单元测试框架,既可以在浏览器环境中运行,也可以在 node.js 环境下运行。我们只需要编写测试用例,mocha 会将测试自动运行并给出测试结果。mocha 的主要特点有:既可以测试简单的 JavaScript 函数,又可以测试异步代码;  可以自动运行所有测试,也可以只运行特定的测试;可以支持 before、after、be...

2020-04-15 16:00:39 2733 1

原创 快速学习-以太坊编写合约测试脚本

编写合约测试脚本我们已经实现了合约的编译和部署的自动化,这将大大提升我们开发的效率。但流程的自动化并不能保证我们的代码质量。质量意识是靠谱工程师的基本职业素养,在智能合约领域也不例外:任何代码如果不做充分的测试,问题发现时通常都已为时太晚;如果代码不做自动化测试,问题发现的成本就会越来越高。在编写合约时,我们可以利用 remix 部署后的页面调用合约函数,进行单元测试;还可以将合约部署到私链,...

2020-04-15 14:32:01 658

原创 快速学习-以太坊编写合约的部署脚本

编写合约的部署脚本上节课我们已经通过编译从 solidity 源码得到了字节码,接下来我们会试图完成一个自动化脚本,将合约部署到区块链网络中。部署的必要条件与以太坊节点的通信连接我们需要启动一个以太坊节点,连接到想要的网络,然后开放 HTTP-RPC的 API(默认 8545 端口)给外部调用;或者也可以用第三方提供的可用节点入口,以太坊社区有人专门为开发者提供了节点服务。目前我们直接用 ...

2020-04-15 14:29:25 684

原创 快速学习-以太坊编写合约的编译脚本

编写合约的编译脚本之前的课程中,我们已经熟悉了智能合约的编译。编译是对合约进行部署和测试的前置步骤,编译步骤的目标是把源代码转成 ABI 和 Bytecode,并且能够处理编译时抛出的错误,确保不会在包含错误的源代码上进行编译。开始我们的编译方式是用 solc 工具做命令行编译,这个过程中牵涉到大段内容的复制粘贴,很容易出错;之后在项目中引入 solc 模块,可以在 node 命令行中自动编译...

2020-04-15 14:11:53 581

原创 快速学习-简单投票 DApp

简单投票 DApp接下来我们要开始真正做一个 DApp,尽管它这是很简单的一个投票应用,但会包含完整的工作流程和交互页面。构建这个应用的主要步骤如下:我们首先安装一个叫做 ganache 的模拟区块链,能够让我们的程序在开发环境中运行。写一个合约并部署到 ganache 上。然后我们会通过命令行和网页与 ganache 进行交互。我们与区块链进行通信的方式是通过 RPC(Remote...

2020-04-15 10:00:50 2053 3

原创 快速学习-Solidity 深入理解

Solidity 深入理解Solidity源文件布局pragma (版本杂注)源文件可以被版本 杂注pragma所注解,表明要求的编译器版本例如:pragma solidity ^0.4.0;源文件将既不允许低于 0.4.0 版本的编译器编译, 也不允许高于(包含) 0.5.0 版本的编译器编译(第二个条件因使用 ^ 被添加)import(导入其它源文件)Solidity 所支...

2020-04-15 09:06:04 687 2

原创 快速学习-Ballot -- 一个简单的投票合约

Ballot – 一个简单的投票合约电子投票的主要问题是如何将投票权分配给正确的人员以及如何防止被操纵。 这个合约展示了如何进行委托投票,同时,计票又是 自动和完全透明的为每个(投票)表决创建一份合约,然后作为合约的创造者——即主席,将给予每个独立的地址以投票权地址后面的人可以选择自己投票,或者委托给他们信任的人来投票在投票时间结束时,winningProposal() 将返回获得最多投...

2020-04-12 13:35:05 563 1

原创 快速学习-智能合约概述

智能合约概述Solidity中合约一组代码(合约的函数 )和数据(合约的状态 ),它们位于以太坊区块链的一个特定地址上代码行 uint storedData; 声明一个类型为 uint (256位无符号整数)的状态变量,叫做 storedData函数 set 和 get 可以用来变更或取出变量的值合约结构状态变量(State Variables)作为合约状态的一部分,值会永久保存...

2020-04-12 10:18:56 413

原创 快速学习-Solidity编译器

Solidity编译器RemixRemix 是一个基于 Web 浏览器的 Solidity IDE;可在线使用而无需安装任何东西http://remix.ethereum.orgsolcjssolc 是 Solidity 源码库的构建目标之一,它是 Solidity 的命令行编译器使用 npm 可以便捷地安装 Solidity 编译器 solcjsnpm install -g ...

2020-04-12 10:01:09 602

原创 快速学习-Solidity源码和智能合约

Solidity源码和智能合约Solidity 源代码要成为可以运行在以太坊上的智能合约需要经历如下的步骤:用 Solidity 编写的智能合约源代码需要先使用编译器编译为字节码(Bytecode),编译过程中会同时产生智能合约的二进制接口规范(Application Binary Interface,简称为ABI);通过交易(Transaction)的方式将字节码部署到以太坊网络,每...

2020-04-12 09:48:05 784

原创 快速学习-Solidity语言特性

Solidity语言特性Solidity的语法接近于JavaScript,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约,它又有很多的不同:以太坊底层基于帐户,而不是 UTXO,所以增加了一个特殊的address 的数据类型用于定位用户和合约账户。语言内嵌框架支持支付。提供了 payable 等关键字,可以在语言层面直接支持支付。使用区块链进行数据存储。数据的每一个状...

2020-04-12 09:46:16 815

原创 快速学习-Solidity简介

Solidity是什么Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。Solidity 是静态类型语言,支持继承、库和复杂的用户定义类型等特性。内含的类型除了常见编程语言中的标准类型,还包括 address 等以太坊独有的类型,Solidity...

2020-04-12 09:45:02 473

原创 快速学习-以太坊合约的创建和自毁

合约的创建和自毁通过一个特殊的消息调用 create calls,合约可以创建其他合约(不是简单的调用零地址)合约代码从区块链上移除的唯一方式是合约在合约地址上的执行自毁操作 selfdestruct ;合约账户上剩余的以太币会发送给指定的目标,然后其存储和代码从状态中被移除...

2020-04-12 09:43:18 749

原创 快速学习-EVM指令集

EVM指令集所有的指令都是针对"256位的字(word)"这个基本的数据类型来进行操作具备常用的算术、位、逻辑和比较操作,也可以做到有条件和无条件跳转合约可以访问当前区块的相关属性,比如它的块高度和时间戳消息调用( Message Calls )合约可以通过消息调用的方式来调用其它合约或者发送以太币到非合约账户合约可以决定在其内部的消息调用中,对于剩余的 gas ,应发送和保留多...

2020-04-12 09:34:22 711

原创 快速学习-EVM数据存储

EVM数据存储Storage每个账户都有一块持久化的存储空间,称为 storage,这是一个将256位字映射到256位字的key-value 存储区,可以理解为合约的数据库永久储存在区块链中,由于会永久保存合约状态变量,所以读写的 gas 开销也最大Memory(内存)每一次消息调用,合约会临时获取一块干净的内存空间生命周期仅为整个方法执行期间,函数调用后回收,因为仅保存临时变量...

2020-04-10 09:45:10 458

原创 快速学习-以太坊EVM和交易

EVM和交易交易可以看作是从一个帐户发送到另一个帐户的消息,它可以包含二进制数据(payload)和以太币如果目标账户含有代码,此代码会在EVM中执行,并以payload 作为入参,这就是合约的调用如果目标账户是零账户(账户地址为 0 ),此交易就将创建一个 新合约 ,这个用来创建合约的交易的 payload 会被转换为 EVM 字节码并执行,执行的输出作为合约代码永久存储...

2020-04-08 12:13:00 406

原创 快速学习-以太坊虚拟机(EVM)简介

以太坊虚拟机(EVM)以太坊虚拟机 EVM 是智能合约的运行环境作为区块验证协议的一部分,参与网络的每个节点都会运行EVM。他们会检查正在验证的块中列出的交易,并运行由EVM中的交易触发的代码EVM不仅是沙盒封装的,而且是完全隔离的,也就是说在EVM 中运行的代码是无法访问网络、文件系统和其他进程的,甚至智能合约之间的访问也是受限的合约以字节码的格式(EVM bytecode)存在于区块...

2020-04-08 12:08:31 1425

原创 快速学习-以太坊特殊交易:创建(部署)合约

特殊交易:创建(部署)合约有一中特殊的交易,具有数据负载且没有 value,那就是一个创建新合约的交易。合约创建交易被发送到特殊目的地地址,即零地址0x0。该地址既不代表 EOA 也不代表合约。它永远不会花费以太或发起交易,它仅用作目的地,具有特殊含义“创建合约”。虽然零地址仅用于合同注册,但它有时会收到来自各种地址的付款。这种情况要么是偶然误操作,导致失去以太;要么是故意销毁以太。合约...

2020-04-08 11:55:07 641

原创 快速学习-以太坊向 EOA 或合约传递 data

向 EOA 或合约传递 data当交易包含数据有效负载时,它很可能是发送到合约地址的,但它同样可以发送给 EOA如果发送 data 给 EOA,数据负载(data payload) 的解释取决于钱包如果发送数据负载给合约地址,EVM 会解释为函数调用,从 payload 里解码出函数名称和参数,调用该函数并传入参数发送给合约的数据有效负载是32字节的十六进制序列化编码:——函数选择器:...

2020-04-08 11:07:21 962

原创 快速学习-以太坊交易的 value 和 data

交易的 value 和 data交易的主要“有效负载”包含在两个字段中:value 和 data。交易可以同时有 value 和 data,仅有 value,仅有 data,或者既没有 value 也没有 data。所有四种组合都有效。仅有 value 的交易就是一笔以太的付款仅有 data 的交易一般是合约调用进行合约调用的同时,我们除了传输 data, 还可以发送以太,从而交易中同时...

2020-04-08 11:06:03 1610

原创 快速学习-以太坊并发和nonce

并发和nonce以太坊是一个允许操作(节点,客户端,DApps)并发的系统,但强制执行单例状态。例如,出块的时候只有一个系统状态。假如我们有多个独立的钱包应用或客户端,比如 MetaMask和 Geth,它们可以使用相同的地址生成交易。如果我们希望它们都够同时发送交易,该怎么设置交易的nonce呢?用一台服务器为各个应用分配nonce,先来先服务——可能出现单点故障,并且失败的交易会将后续...

2020-04-08 10:58:14 1063 1

原创 快速学习-以太坊交易的本质

交易的本质交易是由外部拥有的账户发起的签名消息,由以太坊网络传输,并被序列化后记录在以太坊区块链上。交易是唯一可以触发状态更改或导致合约在EVM中执行的事物。以太坊是一个全局单例状态机,交易是唯一可以改变其状态的东西。合约不是自己运行的,以太坊也不会“在后台”运行。以太坊上的一切变化都始于交易。...

2020-04-08 10:52:41 358

原创 快速学习-以太坊合约应用

合约应用一维护一个数据存储(账本),存放对其他合约或外部世界有用的内容最典型的例子是模拟货币的合约(代币)合约应用二通过合约实现一种具有更复杂的访问策略的普通账户(EOA),这被称为“转发合同”:只有在满足某些条件时才会将传入的消息重新发送到某个所需的目的地址;例如,一个人可以拥有一份转发合约,该合约会等待直到给定三个私钥中的两个确认之后,再重新发送特定消息钱包合约是这类应用中...

2020-04-08 10:50:49 322

原创 快速学习-以太坊交易与合约

以太坊交易(Transaction)签名的数据包,由EOA发送到另一个账户消息的接收方地址发送方签名金额(VALUE)数据(DATA,可选)START GASGAS PRICE以太坊合约(Contract)可以读/写自己的内部存储(32字节key-value的数据库)可向其他合约发送消息,依次触发执行一旦合约运行结束,并且由它发送的消息触发的所有子执行(sub-exec...

2020-04-08 10:49:14 503

原创 快速学习-以太坊账户类型

以太坊账户类型外部账户 (Externally owned account, EOA )合约账户 (Contract accounts)EOA外部账户(用户账户/普通账户)有对应的以太币余额可发送交易(转币或触发合约代码)由用户私钥控制没有关联代码合约账户外部账户(用户账户/普通账户)有对应的以太币余额有关联代码由代码控制可通过交易或来自其它合约的调用消息来触...

2020-04-08 09:56:03 2872

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除