智能合约

【智能合约】编写复杂业务场景下的智能合约——可升级的智能合约设计模式(附Demo)

会有一股神秘感。 提交于 2020-01-22 03:36:15
可升级的以太坊智能合约设计模式 目录 可升级的以太坊智能合约设计模式 智能合约的现状 智能合约的局限 智能合约目前的发展方向 如何利用智能合约实现复杂的业务场景 智能合约设计模式的技术点 智能合约设计模式 智能合约设计模式的优缺点 可升级智能合约DEMO 智能合约的现状 以太坊在区块链上实现了智能合约的概念,用于:同质化通证发行(ERC-20)、众筹、投票、存证取证等等,共同点是:合约逻辑简单,只是业务流程中的关键节点,而非整个业务流程。而智能合约想解决的信任传递,是环环相扣的,如果在传统系统环节被恶意侵入和篡改数据,那么传入智能合约的数据就是不受到信任的。因此,整体业务流程上链是智能合约发展的趋势。 智能合约的局限 智能合约在早期被设计的时候,并不打算支撑复杂的业务体系,这和它设计的初衷相违背:漏洞往往出现在程序员编写的代码和他想实现的逻辑之间存在着差距,越是简单的代码越是安全。简单和受限访问成了智能合约安全可靠的保障。 因此,智能合约引入了隔离网络和文件系统的沙箱环境、基于栈的编译器(有限高度的栈深以及仅可访问栈顶16个元素的限制)、静态语言、gasLimit(限定了合约的大小,每个合约能处理的逻辑有限;限定每个函数逻辑的复杂度,每一步操作都会消耗gas,以至于连使用循环都成了奢侈)、严格的内存访问限制(每个合约仅可以访问自己的存储单元),这就导致了智能合约不同于传统编程语言

以太坊私链与智能合约部署学习(博主修正篇)—— 第一篇

廉价感情. 提交于 2020-01-14 18:42:32
以太坊(Ethereum)自2017年5月诞生以来,发展迅速。作为了一个小白,博主初步打算上个车,过个瘾。那什么是以太坊?请参看度娘的解释(https://baike.baidu.com/item/%E4%BB%A5%E5%A4%AA%E5%9D%8A/20865117?fr=aladdin)。 事物是个新事物,也是个好东西,但资料不多,所以小白博主也只能慢慢找寻资料,慢慢记录自己填坑的过程。 第一篇的主题是:以太坊私链的创建:) 一、配置环境与软件安装 1、安装geth 以下的资料来自:http://8btc.com/article-4537-1.html MAC OSX 首先确保已安装 homebrew,没有安装过的可以在命令行下执行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 进行安装 brew tap ethereum/ethereum brew install ethereum WINDOWS 访问 https://geth.ethereum.org/downloads/ 下载并安装 Geth for Windows LINUX git clone https://github.com/ethereum/go

区块链 四大特征

寵の児 提交于 2020-01-14 08:44:39
这四个基础特征分别是:不可篡改,不可复制的唯一性,智能合约,去中心自组织或社区化(见图1)。 区块链不只是技术,它还将从经济、管理、社会层面带来变化,它可能改变人类交易的方式,它将改变货币、账本、合同、协同等方面,这是我们将在后续章节中讨论的。 图1:一张图看懂区块链:从基础到应用 接下来,我们先分别讨论区块链的这四个基础特性。 区块链的四大特征之一:不可篡改 区块链最容易被理解的特性是不可篡改的特性。 不可篡改是基于“区块+链”(block+chain)的独特账本而形成的:存有交易的区块按照时间顺序持续加到链的尾部。要修改一个区块中的数据,就需要重新生成它之后的所有区块。 共识机制的重要作用之一是使得修改大量区块的成本极高,从而几乎是不可能的。以采用工作量证明的区块链网络(比如比特币、以太坊)为例,只有拥有 51% 的算力才可能重新生成所有区块以篡改数据。但是,破坏数据并不符合拥有大算力的玩家的自身利益,这种实用设计增强了区块链上的数据可靠性。 通常,在区块链账本中的交易数据可以视为不能被“修改”,它只能通过被认可的新交易来“修正”。修正的过程会留下痕迹,这也是为什么说区块链是不可篡改的,篡改是指用作伪的手段改动或曲解。 在现在常用的文件和关系型数据中,除非采用特别的设计,否则系统本身是不记录修改痕迹的。区块链账本采用的是与文件、数据库不同的设计,它借鉴的是现实中的账本设计—

HyperLedger/Fabric JAVA-SDK with 1.1

白昼怎懂夜的黑 提交于 2020-01-12 15:12:56
HyperLedger/Fabric JAVA-SDK with 1.1 该项目可直接在 github 上访问。 该项目介绍如何使用fabric-sdk-java框架,基于fabric-sdk-java v1.1正式版开发,可向下兼容1.0版本。 该项目没有对原JAVA-SDK做修改,主要是结合HyperLedger Fabric与fabric-sdk-java中的交互方式做了个人感觉更为清晰的描述,希望能够帮助更多的人尽快熟悉fabric-sdk-java的操作流程和方式。 sdk-advance sdk-advance是基于fabric-sdk-java v1.1的服务,其主要目的是为了更简单的使用fabric-sdk-java,对原有的调用方法做了进一步封装,主要提供了各种中转对象,如智能合约、通道、排序服务、节点、用户等等,最终将所有的中转对象交由一个中转组织来负责配置,其对外提供服务的方式则交给FabricManager来掌管。 该项目仅作为学习分享的形式提交维护,关于生产部署方面,sdk-advance与app的交互可自行选择采用thrift或protobuf等数据传输协议实现,这里并没有提供该方案的具体实现,需要自己动手解决。 sdk-advance-intermediate intermediate系列对象是该项目的主要封装对象,间接屏蔽了真实应用层与fabric

区块链100讲:浅析以太坊网络智能合约原理

不羁岁月 提交于 2020-01-08 13:32:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 以太坊图灵完备的智能合约丰富了区块链从比特币单一数字资产去中心化转移到去中心化的全球分布式计算机变为可能,虽然在以太坊网络运行代码成本比较高。相对于比特币的脚本,以太坊智能合约的出现是一种比较大的进步。这篇文章我们来讨论以太坊网络智能合约的工作原理。 1 区块链101 区块链简而言之就是非中心化的分布式账本,一种多方参与者共享的特定类型数据库。 账本中保存在区块链网络中发生所有的交易,每个加入网络的节点都有数据的全量拷贝。经济激励模型削弱甚至消除了独立节点之间的信任基础,在不需要信任的开放网络中转移数字资产。 区块链世界奉行 Don't trust, verify it 原则。 2 智能合约 图灵完备的智能合约让以太坊成为继比特币之后区块链技术最大的亮点。比特币是数字资产作为价值的载体,而以太坊超越了数字资产属性,赋能去中心化应用。智能合约是能够在区块链网络运行的代码逻辑。 3 以太坊账户模型和状态模型 比特币使用 UTXO 模型,而以太坊使用账户模型。智能合约在以太坊中也属于账户。以太坊网络有且仅有一个经常被更新的 State trie 全局状态。state trie 通过健值对维护所有在以太坊网络发生过交易的账户。 key 为长度为 160 bit 的以太坊地址,value 为下面四个要素使用 RLP

开题报告区块链参考论文集【2012001】

我是研究僧i 提交于 2020-01-06 22:03:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 区块链作为一种崭新的、颠覆性的技术,是国内外活跃的研究领域和毕业设计选题方向。本文列出最新的一组区块链方面的论文,希望可以对选择区块链毕业设计的同学们有所帮助,这是 汇智网 编辑整理的区块链毕业设计论文系列中的第5篇。 1、EdgeToll - 基于区块链的收费系统 边缘计算是对时间延迟敏感的云应用用于提高服务质量的一种新颖的计算模式。然而,目前的边缘计算都是针对特定应用设计,无法在公共资源中分享资源边。在本论文中,我们利用支付通道技术设计并实现了EdgeTool,一种基于区块链的收费系统,可以用于异构公共边缘服务的分享。我们的测试系统表明论文提出的方案具有时间和成本方面的效率优势。 论文PDF下载: EdgeToll: A Blockchain-based Toll Collection System for Public Sharing of Heterogeneous Edges 2、联盟学习证明 —— 一种新颖的能量寻源共识算法 PoW,即工作量证明,是 比特币 、 以太坊 等区块链中应用的最流行的共识算法,它需要大量能源才能运行,但是除了决定矿工的记账权再无其他有效产出。为了解决PoW共识的缺点,我们提出了一种新颖的能量循环共识算法,PoFL,即联盟学习证明算法

区块链入门笔记慢雾

我只是一个虾纸丫 提交于 2020-01-06 14:42:42
区块链入门笔记|慢雾 名词解释 1.公链:任何人可随时读取、发送交易且能获得有效确认的共识区块链。(去中心化、数据不可更改) 2.交易所:数字货币买卖交易平台。 去中心化交易所:交易行为直接发生在区块链上,数字货币直接发回使用者的钱包或保存在区块链上的智能合约上。 中心化交易所:用户使用交易所时,货币交换仅修改交易所数据库内的资产数字,用户只看到账面上数字的变化,在用户提款时准备数字货币可供汇出即可。 3.节点:区块链网络中的每个节点,就相当于存储所有区块链数据的每一台电脑或服务器。 全节点:保留全网数据 轻节点:保留与自己相关的交易数据 4.RPC:以太坊提供HTTP、IPC、WebSocket等RPC调用。默认在8545端口提供JSON RPC接口,数据传输采用JSON格式,可以执行Web3库的各种命令,可以向前端提供区块链上的信息。 5.钱包:管理私钥的工具,允许使用者通过钱包检查、存储、交易其持有的数字货币。 冷钱包:离线钱包? 热钱包:连接网络进行使用。 6.公钥:由私钥生成,通过一系列计算可以得到钱包的地址。 7.私钥:由随机算法生成,通过非对称加密算法算出公钥,公钥再算出币的地址。 8.助记词:利用固定算法,将私钥转换成十多个常见的英文单词。=私钥!!! 9.Keystore:把私钥通过钱包密码再加密得来的,可保存为文本或JSON。 10.共识

【区块链】以太坊学习基础

旧巷老猫 提交于 2019-12-28 05:41:05
以太坊基础 简介 区块链是一种分布式流水账数据库; 以太坊=区块链+以太坊虚拟机(EVM),其本质是一个状态机; 以太坊的所有活动(状态变动)都是通过账户间发送交易来完成的; 以太坊上的所有操作都是要消耗gas的,gas是要用以太币(Ether)买的; 以太坊的生态系统出现端倪,DApp的雏形已经有了; 阅读以太坊黄皮书是最佳的学习方法 以太坊入门学习指南 以太坊DApp编程全流程 基本测试环境 Truffle编程框架 Solidity智能合约编程语言 Web3js合约调用 js/node.js基础 以太坊学习主要内容 以太坊简介 以太坊编程环境构建 js/nodejs简介:语言与服务设计基础 solidity编程:智能合约实现 web3.js编程:智能合约调用 案例一:数字通证系统设计 案例二:投票系统 区块链典型系统结构 应用层 合约层 激励层 共识层 网路层 数据层 以太坊技术框架 以太坊核心概念 点对点网络:所有节点都地位平等,没有中心服务器 区块链:去中心化存储数据库 EVM:虚拟机,运行程序 DApp:智能合约的应用 以太币(Ether):以太坊世界中使用的数字货币 Gas:以太坊里对所有活动进行消耗资源计量的单位。读取免费,写入收费。 矿工(Miner):挖矿,构建基础设施 什么是区块链? 共识算法有哪些? POW:Proof of Work,工作证明 POS

什么是区块链智能合约?区块链智能合约的作用是什么?

微笑、不失礼 提交于 2019-12-25 14:54:39
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、前言 自从2009年第一枚比特币诞生,九年多时间里,区块链技术正在被应用在人们生活的各方各面,从1.0时代的数字货币,到2.0时代的智能合约,再到当下3.0时代的全面应用,区块链每一次时代跃迁都必然具有划时代意义。 今天主要聊一聊区块链2.0时代的智能合约。相信币圈大多数投资者们都或多或少了解智能合约,但是可能也存在不少所谓的“投机者”只关心炒币,懒得去关心这些底层技术;可是从长远来看,不论你是投机还是投资都应该了解并学习它。 二、智能合约 智能合约(smart contract)是由尼克•萨博(Nick Szabo)提出来的。他的定义是“一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议。” 简单来说,智能合约是一个事务处理模块和状态机构成的系统,它的存在是为了让复杂、带有触发条件的数字化承诺能够按参与者意愿正确执行 三、智能合约的实现方法 实现智能合约就需要“图灵完备”的计算机编程语言。“图灵完备”这个词大家似乎了解的不多,可以简单地理解为能把世间一切可以计算解决的问题都计算出来的,这样的一种虚拟机或者编程语言就叫图灵完备。 举一个不太精确但是很容易理解的例子说明一下:比如两口做饭的锅,一口锅可以实现一切的烹饪方法煎、炒、蒸、炖、炸、汆、涮、卤等

Chainlink预言机基本原理(一)

≡放荡痞女 提交于 2019-12-23 18:35:01
Chainlink预言机基本原理(一) 作者:团长 本文我们来从技术上简述一下Chainlink的基本原理。如果用最短的一句话解释什么是Chainlink,可以说Chainlink一个去中心化的预言机项目,所以为了理解Chainlink的工作原理,我们首先要明白什么是预言机。 预言机 预言机的英文为Oracle,和著名的数据库服务提供商Oracle(甲骨文)重名,但是两者除了名字相同以为并没有任何关系。 Oracle这个单词是什么意思,下面是我在vocabulary.com上查到的Oracle的含义: Back in ancient times, an oracle was someone who offered advice or a prophecy thought to have come directly from a divine source. In modern usage, any good source of information can be called an oracle. 中文的大概意思是:在古代,oracle是一个提出建议或预言的人,他的建议或预言被认为是直接来自于神。在现代用法中,任何好的信息来源都可以称为oracle。 这样就不难理解了,Oracle传达了万能全知的神的旨意,而甲骨文最初就是用来占卜吉凶时的记录,也在当时也被认为是神谕