![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
区块链
阿卡司机
这个作者很懒,什么都没留下…
展开
-
EOS智能合约入门
1 准备工作首先在本地将私有链运行起来:sudo nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin私有链默认存储的位置在~/.local/share/eosio/nodeos路径下面。然后新...原创 2018-12-04 11:56:26 · 355 阅读 · 0 评论 -
EOS智能合约之多重签名
1 多签名操作的概念回想一下创建账户的命令:Usage: cleos create account [OPTIONS] creator name OwnerKey [ActiveKey]一个账户拥有Owner和Active权限。同时账户也能够自定义新的权限。所谓多签名,就是一个账户可以将它的权限指派给其它多个账户,一个操作只有得到这些授权用户签名而得到执行。多签名是加强账户安全性的一...原创 2018-12-05 13:59:28 · 1172 阅读 · 0 评论 -
EOS建立节点与主网进行同步
本文介绍在本地建立一个EOS节点并与EOS主网进行数据同步。首先新建一个文件夹,在里面新建一个genesis.json创世文件,文件内容:{ "initial_timestamp": "2018-06-08T08:08:08.888", "initial_key": "EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3",...原创 2018-12-05 15:34:35 · 1407 阅读 · 1 评论 -
10分钟学会创建账户、转账及买卖RAM等常用命令
搭建环境本文主要介绍EOS命令的使用,搭建环境只作简单介绍,更多信息请查阅 官方手册。1、获取EOS代码git clone https://github.com/EOSIO/eos --recursive2、使用脚本自动安装cd eos ./eosio_build.sh配置命令指向主网1、创建EOS操作命令cleos别名,便于后续命令均指向EOS主网进入cl...原创 2018-12-05 17:06:22 · 353 阅读 · 0 评论 -
java访问eos
0 java库jeos目前EOS方面比较成熟的开源Java SDK非常少,个人推荐一个比较好用的java库jeos,地址https://github.com/adyliu/jeos。在gradle中添加这个库:compile group: 'io.jafka', name: 'jeos', version: '0.9.14'1 jeos使用最简单的用来访问EOS节点的代码:...原创 2018-12-14 17:25:31 · 1384 阅读 · 2 评论 -
用go编写区块链系列之5--地址与数字签名
0 介绍在上一篇文章我们实现了交易。你被灌输了这样一种观念:在比特币中没有账户,个人信息数据不需要也不会被存储。但是仍然需要一些东西去证明你是一笔交易的输出的所有者。这是比特币需要地址的原因。之前我们使用字符串去代表用户地址,现在我们需要引入地址了。1 地址密码学比特币地址这里有一个比特币地址的例子: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。它传说是比特...翻译 2018-09-21 13:53:22 · 878 阅读 · 3 评论 -
用go编写区块链系列之2---PoW
在前一篇文章中,我们构建了一个最简单的额区块链,本文中我们将改进这个区块链,加入PoW机制,使得这个区块链变成一个可以挖矿的区块链。原文见https://jeiwan.cc/posts/building-blockchain-in-go-part-2/1 Proof-of-Work(PoW)区块链的PoW机制的思想就是,一个节点必须做艰难的工作才能够推送数据到区块链中。这个艰难工作保证了区...原创 2018-09-18 12:15:20 · 664 阅读 · 0 评论 -
ubuntu16.04安装truffle
1 先安装nodejs和npmcurl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -sudo apt-get install -y nodejs查看安装版本root@azure:/home/ubuntu/mycoin# node -vv6.14.4root@azure:/home/ubuntu/mycoin...原创 2018-09-12 14:51:28 · 1520 阅读 · 0 评论 -
go访问geth区块链节点
go访问区块链,采用的是json-rpc的方式来进行访问。这里用了github上的库ethrpc,这个库采用json-rpc的方式来访问geth节点。1 先下载ethrpc库go get -u github.com/onrik/ethrpc2 上代码package mainimport ( "fmt" "log" "github.com/onrik/ethrpc")...原创 2018-08-28 14:16:10 · 1078 阅读 · 0 评论 -
web3j采用call方式查询智能合约执行结果
以太坊在调用智能合约中的函数时,即使交易成功发布到区块链上,但是如果合约参数检查出错,交易执行会失败,这个时候调用端仍然能够查询到交易被打包,但是交易执行结果跟期望的会不相符。假设一个智能合约中有一个transfer函数: function transfer(address to, uint256 val) public view returns(bool) { ...原创 2018-08-15 18:39:41 · 6890 阅读 · 2 评论 -
查询智能合约的创建信息
1 以太坊浏览器上面查询智能合约创建信息在https://etherscan.io上查询一个智能合约地址,信息显示如图所示。其中有一条 Contract Creator: 0x0a88fb486012021369048452d7d5fbeb705da3c6at txn 0xe441928ac4300472d55a4ec2af81ec8533888c08170f4cc5ab9...原创 2018-08-11 17:57:04 · 7347 阅读 · 0 评论 -
geth源码修改:取消调用智能合约的gas费用
1 问题的提出在联盟链里,有需求是普通的转账ether可以收取交易gas,发布或调用智能合约不需要gas费用。在私链环境下,如果智能合约调用是私链官方者的行为,则希望智能合约不收取gas费用。所谓的普通转账,就是在web3里面通过eth.sendTransaction({from:a,to:b,value:c)这种方式发起的交易。2 虚拟机EVM中对交易处理及收取gas的机制在源码 c...原创 2018-08-11 17:02:22 · 2984 阅读 · 1 评论 -
用go编写区块链系列之3--持久化与命令行
在上一篇文章中我们构建了一个带PoW挖矿功能的区块链。我们这个区块链已经很接近一个全功能的区块链,但是它还缺少一些很重要的特性。这一章中我们将将实现将区块链数据存入数据库,并且编写一个简单的命令行接口去与区块链进行交互。本质上区块链是一个分布式数据库,在这里我们忽略“分布式”而只关注数据库。本文英文原文见https://jeiwan.cc/posts/building-blockchain-i...原创 2018-09-18 18:56:31 · 622 阅读 · 0 评论 -
用go编写区块链系列之1---基本协议
本文将要用go语言实现一个最简单的区块链,更多内容请参考https://jeiwan.cc/posts/building-blockchain-in-go-part-1/。1 区块区块是区块链组成单元,区块链就是由一个一个区块串联而成。区块链是一个不断向后延伸的区块的链表。这里定义一个最简单的区块结构:type Block struct { Timestamp int64...原创 2018-09-14 16:54:22 · 1199 阅读 · 0 评论 -
用go编写区块链系列之4--交易1
0 介绍比特币区块链的核心就是交易,区块链唯一的目的就是用一种安全可信的方式去存储交易,交易一经创建就无法更改。这章中我们将在区块链中引入交易。1 比特币中的交易如果你是开发网络应用的程序员,若让你开发一个在线支付交易,你多半会在数据库中创建俩张表:账户表和交易表。账户表中将会存储用户账户信息,比如个人信息和余额。交易表中将会存储交易信息,比如钱从一个账户转账给另一个账户。但是在比特币...翻译 2018-09-19 18:28:46 · 775 阅读 · 0 评论 -
用go编写区块链系列之7--网络
1 区块链中的网络区块链是一个分布式数据库,所谓的分布式就是分散在多台电脑上面,所以需要具有网络通信功能。区块链是一个分布式系统,意味着其中没有客户端和服务器,所有的网路节点都是平等的。一个节点兼具服务器和客户端俩种角色,这与传统的网络应用非常不同。区块链网络使用P2P网络,即网络中的节点都是俩俩直接互联的。下图是p2p网络拓扑图。它的拓扑是扁平化的,因为其中不存在层级。这种网络中的节点实...翻译 2018-09-30 14:15:19 · 1107 阅读 · 0 评论 -
clique共识机制流程及#17620 bug修复理解
1 clique共识机制的特性clique是基于授权的共识机制(POA)在以太坊中的实现。计划在Ropsten攻击以后,用来支持以太坊私测试链testnet(也可以自己搭建联盟链或者私有链)。clique机制的特性有:不需挖矿,由预先制定好的节点轮流出块 节点管理,可通过选举将新节点添加或剔除 出块周期固定2 clique核心源码解读使用的版本是最新的go-ethereumc 1...原创 2018-10-16 17:06:21 · 1539 阅读 · 1 评论 -
以太坊事件机制以及优化
1 以太坊的事件机制以太坊go-ethereum源码中发送事件除了用常规的通道以外,还用了封装的Feed结构来执行事件的订阅和发送。以太坊中使用了大量的Feed来处理事件。使用Feed订阅事件的步骤是:定义一个通道ch:ch=make(someType) 定义一个Feed对象feed Feed订阅通道ch:feed.Subscribe(ch) 使用feed发送数据给通道:feed.S...原创 2018-11-09 13:49:18 · 982 阅读 · 1 评论 -
以太坊节点增加网络安全的一些方法
这里主要以以太坊平台来讲解。对于其它平台,基本原理是差不多的。以太坊对外暴露了RPC接口,外部应用一般是通过RPC对区块链发起访问。最普遍的是采用Http的方式来发起请求。所以许多通用的增进Http安全的方式都能在这里派上用场。1 Http鉴权通过安装nginx,然后再通过nginx配置Basic HTTP Authentication的方式,通过用户名和密码组合来对Http通信进行加密保...原创 2018-11-14 14:15:01 · 1276 阅读 · 0 评论 -
rsync打补丁以检测文件改名
1 rsync本来不能侦测文件改名ubuntu中默认安装的rsync是在同步文件的时候,当文件发生删除、修改、创建的时候,都可以侦测到。但是当同步源文件改名时,rsync同步到目标文件时不是简单的改名,而是会先删除原有文件然后再重新传输文件过去,当文件很大的时候,这种方案会比较耗时。如果rsync能够自动侦测到原文件改名并自动将目标文件改名,则这个过程就会是瞬间完成。2 给rsync打de...原创 2018-10-24 18:59:41 · 841 阅读 · 2 评论 -
geth的rpc采用加密访问方式
1 为什么RPC要加密访问geth给用户暴露了很多Json-RPC接口API,可以让web3.js或web3j库来通过这些接口来访问geth节点,可以实现远程查询转账等功能。但是geth暴露的这些接口是未经过任何加密处理的不安全接口。如果geth使用这种方式启动RPC:$ geth — rpc — rpcaddr 0.0.0.0 — rpcport 8545 — rpcapi “db, e...原创 2018-07-18 10:55:16 · 7816 阅读 · 2 评论 -
web3j实现离线发起交易
1 使用web3j发起交易的俩种方式使用web3j封装的json-RPC方法来访问geth客户端,并且向geth端发起交易,可以有俩种方式方式来发起交易的方法。方式1,用户解锁用的keyStore文件保存在geth节点上,用户使用解锁账户的方式发起交易,这种方式适用于中心化的方式比如交易所。方式2,用户的keyStore文件存在本地,用户使用钱包文件给交易签名的方式来发起交易,这种方式适用于DAp...原创 2018-07-09 19:02:02 · 3886 阅读 · 4 评论 -
基于geth的联盟链限制节点发布智能合约
0 需求及原理 如果某盟主基于geth构建了一条联盟链,有许多节点加入进来一起玩。由于智能合约的强大特性,如果每个节点都许仙志的发布智能合约,可能会造成江湖群魔乱舞。现在盟主想限制只有加入了白名单的节点才能发布智能合约,应该怎么做呢? 以太坊的核心是交易(Transaction)。转账、发布智能合约、调用合约等等都是交易。在用户通过consol控制台或客户端向geth提交一笔交易时...原创 2018-05-18 18:14:33 · 1313 阅读 · 0 评论 -
web3j批量转账
使用web3j来连接geth并转账,基本转账函数可以这样写://以太坊转账 //from:转出方账户 //password:转出方密码 //addrTo:收款账户 //value:转账额 public String transferEth(String from,String password,String to,BigInteger value) thr...原创 2018-05-18 16:50:09 · 4387 阅读 · 4 评论 -
基于go-ethereum/p2p模块的聊天程序
以太坊的p2p模块实现了一个p2p分布式网络,是实现以太坊分布式钱包的关键技术。p2p模块的说明见官方github的wiki。本文要实现的是使用以太坊的p2p模块来实现一个简单的聊天程序。1 P2P基本原理p2p的基本原理有一篇博客写的很清楚,详见《p2p的原理和常见的实现方式》。2 编译并启动以太坊的bootnodebootnode节点可以作为p2p网络的路由节点。聊天程序中的俩个p2p节点将以...原创 2018-03-29 17:18:27 · 2273 阅读 · 0 评论 -
200行Go代码实现区块链之三 —— 挖矿算法
在本系列前两篇文章中[1][2],我们向大家展示了如何通过精炼的Go代码实现一个简单的区块链。包括生成块,验证块数据,广播通信等等,这一篇让我们聚焦在如何实现 PoW算法。大家都无不惊呼比特币、以太坊及其他加密电子货币的持续狂热,特别是对于刚接触这个领域的新手,不断得听到张三李四通过 GPU “挖矿”而聚集价值数万乃至数百万加密电子货币。那么“挖矿”到底是什么? 它是如何工作的? 相信对于程序员来...转载 2018-03-24 17:21:59 · 1509 阅读 · 0 评论 -
200行Go代码实现一个区块链之二——区块生成与网络通信
在上一篇文章中,我们向大家展示了如何通过精炼的Go代码实现一个简单的区块链。如何计算每个块的 Hash 值,如何验证块数据,如何让块链接起来等等,但是所有这些都是跑在一个节点上的。文章发布后,读者反响热烈,纷纷留言让我快点填坑(网络部分),于是就诞生了这第二篇文章。这篇文章在之前的基础上,解决多个节点网络内,如何生成块、如何通信、如何广播消息等。流程第一个节点创建“创始区块”,同时启动 TCP s...转载 2018-03-24 17:15:23 · 1686 阅读 · 0 评论 -
ubuntu下使用rsync+inotify-tools实现文件自动备份之一
现在有个需求,A服务器的某个路径下的文件,想备份到B服务器下面。假设A的ip是 192.168.1.75,B的ip是 192.168.1.85。在ubuntu下面可以使用rsync软件配合inotify工具一起来实现这个功能。1 rsync主机端配置 ubuntu16.03系统默认已经安装了rsync软件。需要配置rsync软件。A是数据源,在使用inotify-tools时需要将A...原创 2018-05-08 14:47:33 · 2059 阅读 · 0 评论 -
ubuntu下使用rsync+inotify-tools实现文件同步之二
在前面一篇文章ubuntu下使用rsync+inotify-tools实现文件自动备份之一 讲了怎么在ubuntu下使用rsync和inotify-tools来进行俩台ubuntu服务器之间的文件同步。现在更进一步,假设有A1,A2,A3,A4四台服务器,它们的同步文件夹设置为/data,当其中任意一台机器上文件变化时,能够自动同步到其它机器上去。这个就是本文要讨论的主题。...原创 2018-05-08 14:56:41 · 1050 阅读 · 0 评论 -
geth基于PoA共识机制构建联盟链
1 PoA共识机制PoW机制的缺陷以太坊现阶段是基于PoW共识机制,PoW工作量证明机制就是区块链网络中一堆计算机通过计算随机数的Hash值,谁先找到这个随机数谁就赢的当前区块的记账权。PoW通过比拼算力,谁的算力大,谁就能够抢到记账权。这样导致网络大量算力用来计算毫无意义的随机数工作中去了,而真正用来打包和验证的算力就受到影响。PoW机制存在51%算力共计问题。只要挖矿者掌握全网51%算力就能控...原创 2018-06-25 11:09:00 · 8459 阅读 · 6 评论 -
以太坊的RPC机制
1 go语言的RPC机制 RPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。RPC协议构建于TCP或UDP,或者是 HTTP之上,允许开发者直接调用另一台计算机上的程序,而开发者无需额外地为这个调用过程编写网络通信相关代码,使得开发包括网络分布式程序在内的应用程序更加容易。 go语言有...原创 2018-06-21 17:04:35 · 5732 阅读 · 1 评论 -
智能合约安全审计指南
译者注:智能合约代码的审计,目前还不是技术社区内经常会讨论的主题。今年3月6日,发表在博客网站【Schneier on Security】上的一篇博客(原文链接:【https://www.schneier.com/blog/archives/2018/03/security_vulner_13.html】,原文中附有一篇专业的研究报告【Finding The Greedy, Prodigal, a...转载 2018-05-30 16:15:03 · 4929 阅读 · 1 评论 -
以太坊交易Nonce设置
1 什么是nonce?以太坊中的nonce有两个意义:1.工作量证明:为了证明工作量的无意义的值,这是采矿的本质,这个值将决定采矿的难度,2.账户的随机数:在一个账户中的防止多重交易的用途。例如一个交易从A到B 20个币,可能从A到B发送多次。为了防止交易的重播攻击,每笔交易必须有一个nonce随机数,针对每一个账户nonce都是从0开始,当nonce为0的交易处理完之后,才会处理nonce为1的...原创 2018-06-12 19:14:49 · 5594 阅读 · 0 评论 -
200行go代码实现区块链之五——P2P网络
在之前的文章中,我们已经知道了怎么编写PoW也知道了IPFS怎么工作, 但是有一个致命的缺点,我们的服务都是中心化的,这篇文章会教你怎么实现一个简单的完全去中心化的P2P网络。背景知识什么是P2P网络在真正的P2P架构中,不需要中心化的服务来维护区块链的状态。例如,当你给朋友发送比特币时,比特币区块链的“状态”应该更新,这样你朋友的余额就会增加,你的余额就会减少。在这个网络中,不存在一个权力高度中...转载 2018-05-24 14:24:18 · 2221 阅读 · 1 评论 -
200行Go代码实现区块链之四 ——实现PoS共识机制
PoS简介在上一篇文章中,我们讨论了工作量证明(Proof of Work),并向您展示了如何编写自己的工作量证明区块链。当前最流行的两个区块链平台,比特币和Ethereum都是基于工作量证明的。但是工作证明的缺点是什么呢?其中一个主要的问题是电力能源的消耗。为了挖掘更多的比特币,就需要建立更多的挖矿硬件池,现在在世界各地,挖矿池都在不断建立中,而且呈现出规模越来越大的趋势。例如以下这张照片(仅仅...转载 2018-05-23 15:17:25 · 2534 阅读 · 0 评论 -
go-ethereum发起与执行交易的流程
在geth控制台使用如下命令来发起转账交易:personal.unlockAccount(eth.accounts[0])eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(200,"ether")})将执行到txpool.go的validateTx()函数进行交易验证,验证项目包括交易大小、...原创 2018-05-16 19:06:56 · 2976 阅读 · 0 评论 -
web3j监听智能合约的event事件
假设智能合约中定义了一个事件:pragma solidity ^0.4.0;contract Transfer{ event transfer(address indexed _from, address indexed _to, uint indexed value); function deposit() payable { address current = this;...原创 2018-05-08 15:39:37 · 11247 阅读 · 9 评论 -
[译]学习利用IPFS在区块链上分享文件
原文链接:https://medium.com/@mycoralhealth/learn-to-securely-share-files-on-the-blockchain-with-ipfs-219ee47df54c在阅读本文之前,我们推荐你先阅读这篇文章:200行代码实现一个区块链之一-----最简单的区块链最近对于区块链都火到发烧了。区块链是一项令人兴奋的技术,围绕着它有许多不错的应用,比如...原创 2018-05-25 14:21:29 · 3691 阅读 · 1 评论 -
【转】200行代码实现一个区块链之一-----最简单的区块链
只用200行Go代码写一个自己的区块链!2018-01-30 12:49 Coral Health 1 0 阅读 203区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的。这篇文章就是帮助你使用 Go 语言来实现一个简单的区块链,用不到 200 行代码来揭示区块链的原理!高可用架构也会持续推出更多区块链方面文章,欢迎点击上方蓝色『高可用...转载 2018-03-24 16:54:40 · 4110 阅读 · 2 评论